C# Blazor Pod Scheduling — จัดการ Blazor App บน

Blazor Pod Scheduling

C# Blazor Pod Scheduling Kubernetes Docker SignalR WebSocket Sticky Session HPA Health Check .NET 8 Razor Components
| Aspect | Blazor Server | Blazor WASM | Blazor United (.NET 8) |
|---|---|---|---|
| Render | Server (SignalR) | Browser (WASM) | ทั้งสอง (per component) |
| Sticky Session | ต้องใช้ | ไม่ต้อง | ขึ้นกับ Component |
| Image Size | 80-120MB | 20-30MB (Nginx) | 80-120MB |
| Resource | CPU+RAM มาก | น้อย (Static) | ปานกลาง |
| Scale | ซับซ้อน (Session) | ง่าย (Stateless) | ปานกลาง |
| Offline | ไม่ได้ | ได้ | บางส่วน |
Docker Configuration
# === Blazor Docker Setup === # Dockerfile (Blazor Server) # FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build # WORKDIR /src # COPY *.csproj ./ # RUN dotnet restore # COPY . . # RUN dotnet publish -c Release -o /app/publish # # FROM mcr.microsoft.com/dotnet/aspnet:8.0 # WORKDIR /app # COPY --from=build /app/publish . # ENV ASPNETCORE_URLS=http://+:8080 # ENV ASPNETCORE_ENVIRONMENT=Production # EXPOSE 8080 # HEALTHCHECK --interval=30s --timeout=3s \ # CMD curl -f http://localhost:8080/health || exit 1 # ENTRYPOINT ["dotnet", "BlazorApp.dll"] # Program.cs Health Checks # var builder = WebApplication.CreateBuilder(args); # builder.Services.AddHealthChecks() # .AddDbContextCheck("database") # .AddRedis(builder.Configuration["Redis:Connection"], "redis") # .AddUrlGroup(new Uri("https://api.example.com/health"), "external-api"); # # var app = builder.Build(); # app.MapHealthChecks("/health"); # app.MapHealthChecks("/health/ready", new HealthCheckOptions { # Predicate = check => check.Tags.Contains("ready") # }); from dataclasses import dataclass @dataclass class DockerImage: variant: str base_image: str size: str use_case: str images = [ DockerImage("Blazor Server", "mcr.microsoft.com/dotnet/aspnet:8.0", "80-120MB", "Server-side rendering SignalR WebSocket"), DockerImage("Blazor WASM (Nginx)", "nginx:alpine", "20-30MB", "Client-side WASM Static Files"), DockerImage("Blazor United", "mcr.microsoft.com/dotnet/aspnet:8.0", "80-120MB", "Mixed render modes Server + WASM"), DockerImage("SDK (Build Stage)", "mcr.microsoft.com/dotnet/sdk:8.0", "~700MB (build only)", "Compile Publish ไม่อยู่ใน Final"), ] print("=== Docker Images ===") for d in images: print(f" [{d.variant}] {d.base_image}") print(f" Size: {d.size} | Use: {d.use_case}")เคล็ดลับ

- SignalR: ใช้ Redis Backplane สำหรับ Blazor Server Multi-pod
- Sticky: ตั้ง Cookie Affinity สำหรับ Ingress WebSocket
- WASM: ใช้ Brotli Compression ลด WASM Download Size 60%
- Health: ตั้ง Health Check ตรวจ DB Redis External API
- .NET 8: ใช้ Blazor United เลือก Render Mode ต่อ Component
Blazor คืออะไร
Web Framework C# Microsoft Razor Components Server SignalR WASM WebAssembly United .NET 8 NuGet Entity Framework Interactive UI
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: CircleCI Orbs Low Code No Code
อ่านเพิ่ม: Container Orchestration นอกจาก Kubernetes มีอะไรอีก? Docker · อ่านเพิ่ม: Kubernetes ขั้นสูง สอน Helm Charts, Operators, Service Mesh · อ่านเพิ่ม: Kubernetes Operators และ CRD คืออะไร? สอนสร้าง Custom Contro
Docker ตั้งค่าอย่างไร
Multi-stage dotnet/sdk dotnet/aspnet nginx:alpine dotnet publish Release Health Check ENTRYPOINT 80-120MB Docker Compose SQL Server Redis
แนะนำเพิ่มเติม — ติดตาม XM Signal
เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง AWS EventBridge DNS Management
Kubernetes Deploy อย่างไร
Deployment Replicas Ingress Cookie Affinity SignalR WebSocket Timeout HPA Service sessionAffinity ConfigMap Secret Liveness Readiness Probe
เนื้อหาเกี่ยวข้อง — Azure Container Apps API Gateway Pattern
Health Check ทำอย่างไร
ASP.NET Core AddHealthChecks DbContext Redis URL Disk MapHealthChecks /health /health/ready Liveness Readiness Startup Probe UI Dashboard
แนะนำเพิ่มเติม — อ่านเพิ่มเติมที่ SiamCafeBook
สรุป
C# Blazor Pod Scheduling Kubernetes Docker SignalR Sticky Session HPA Health Check .NET 8 WASM Redis Backplane Ingress Production
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ Lit Element Remote Work Setup





