Episode ini membawa aplikasi ke produksi: Dockerizing aplikasi .NET dengan multi-stage build, deployment ke Kubernetes, Azure, AWS, dan GCP, pengelolaan konfigurasi dan secret di runtime, serta strategi blue-green, canary release, dan rollback.

Kode yang lulus test belum berarti siap produksi. Episode 19 membahas deployment dan cloud native: membungkus aplikasi .NET dalam container, men-deploy ke Kubernetes dan cloud provider, mengelola konfigurasi serta secret di runtime, dan merilis versi baru tanpa downtime.
Setelah episode ini, kalian akan memiliki aplikasi yang tidak hanya berjalan di mesin kalian, tetapi hidup di infrastruktur produksi — dengan strategi rilis yang aman dan kemampuan mundur saat terjadi masalah.
Image .NET yang efisien dibangun dalam dua tahap: satu untuk kompilasi, satu untuk runtime. Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "Catalog.Api.dll"]Tahap build memakai image SDK untuk compile; tahap runtime hanya menyalin artifact ke image aspnet yang ringan. Hasilnya image kecil karena tidak membawa SDK. Framework-dependent image ini butuh base image ASP.NET yang sudah berisi runtime.
Bangun dan jalankan image:
docker build -t catalog-api:1.0.0 .
docker run -p 8080:80 catalog-api:1.0.0docker run -p 8080:80 memetakan port host 8080 ke port 80 container tempat Kestrel mendengarkan. Untuk container non-root, gunakan USER app di Dockerfile — base image .NET menyediakan user app yang aman secara default.
Kubernetes mengelola container dengan deployment, service, dan scaling. Contoh manifest:
apiVersion: apps/v1
kind: Deployment
metadata:
name: catalog-api
spec:
replicas: 3
selector:
matchLabels:
app: catalog-api
template:
metadata:
labels:
app: catalog-api
spec:
containers:
- name: catalog-api
image: registry.example.com/catalog-api:1.0.0
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /api/health
port: 80Deployment ini menjalankan 3 replika dan memeriksa kesehatan via probe pada /api/health — endpoint yang kita buat di episode 11. Health probe penting: Pod yang tidak sehat tidak menerima traffic.
dotnet berjalan native di Linux.Pilih managed Kubernetes untuk kendali penuh, atau platform managed untuk mengurangi operasi. Aplikasi .NET berjalan identik di ketiganya karena container.
Konfigurasi disuntikkan lewat environment variable (episode 10). Di Kubernetes, gunakan ConfigMap dan Secret:
apiVersion: v1
kind: Secret
metadata:
name: catalog-secrets
stringData:
ConnectionStrings__Default: "Server=db;Database=Catalog"Key ConnectionStrings__Default dipetakan langsung ke ConnectionStrings:Default di aplikasi — tidak ada perubahan kode. Secret di Kubernetes disimpan terenkripsi; untuk produksi penuh pertimbangkan integrasi dengan vault atau penyedia cloud.
Aplikasi cloud native mengikuti prinsip 12-factor: konfigurasi dari environment, stateless, dan siap direstart. Aplikasi .NET dengan Generic Host dan DI sudah mendukung sebagian besar prinsip ini secara alami.
Blue-green menjalankan dua lingkungan sekaligus: versi baru (green) disiapkan penuh, lalu traffic dialihkan setelah health check lulus. Rollback adalah memindahkan traffic kembali ke blue — instan dan tanpa downtime.
Canary mengirim sebagian kecil traffic ke versi baru sambil memantau error:
kubectl set image deployment/catalog-api \
catalog-api=registry.example.com/catalog-api:1.1.0
kubectl rollout status deployment/catalog-apikubectl rollout status memantau rollout bertahap. Jika tingkat error naik, kubectl rollout undo mengembalikan ke versi sebelumnya — rollback otomatis menjadi strategi darurat yang terpercaya. Canary lebih halus daripada blue-green karena paparan risiko lebih kecil.
Warning
Persiapkan rollback sejak awal rilis: tag image versi yang jelas, simpan manifest versi sebelumnya, dan pastikan skema database kompatibel maju dan mundur.
Inti yang harus dibawa pulang:
Di episode 20 selanjutnya kita akan membahas observability dan production support — logging dengan Serilog, metrics, tracing, dan integrasi OpenTelemetry, health checks dan monitoring endpoints, serta incident management, diagnostics, dan kesiapan support produksi.