Part 12 · Kubernetes · 12.1.05

Workload Controllers: Deployment, StatefulSet, DaemonSet, Job và CronJob

Controller giữ actual state tiến về desired state. Chọn controller theo identity, placement và completion semantics; đừng dùng Deployment cho mọi workload, và đừng nhầm rollout “Complete” với business SLI đã an toàn.

1. Controllers

Kubernetes controller chạy reconciliation loop: quan sát trạng thái hiện tại, so với desired state trong API object rồi tạo, cập nhật hoặc xóa resource để thu hẹp chênh lệch. Với workload, controller thường quản lý Pod gián tiếp và tiếp tục thay thế Pod bị mất theo policy của object.

Mental model: controller là vòng lặp điều khiển, không phải một lần chạy “deploy”. Nếu bạn xóa một Pod thuộc Deployment/ReplicaSet, controller có thể tạo Pod khác để khôi phục replica count.

2. Controller types

ControllerPhù hợpSemantic cần nhớKhông tự giải quyết
DeploymentStateless replicated applicationQuản lý ReplicaSet, rolling update, rollback Pod templateStable Pod identity, application-level HA, DB migration rollback
StatefulSetWorkload cần stable identity/storage/ordered behaviorOrdinal identity, stable network/storage association, ordered semantics khi cấu hình tương ứngQuorum/replication correctness của database
DaemonSetMột Pod trên mỗi eligible node, ví dụ agent/logging/CNI helperPlacement theo node eligibility; tự thêm Pod khi node phù hợp xuất hiệnGlobal singleton hoặc business sharding
JobFinite work cần đạt completionRetry/recreate Pod cho đến khi đạt completion/failure policyExactly-once side effect
CronJobScheduled JobsTạo Job theo schedule; có concurrency/deadline/timezone policyStrict wall-clock execution exactly once

Controller chỉ cung cấp orchestration semantics. Một StatefulSet không biến application stateful thành HA nếu application, replication protocol hoặc storage không hỗ trợ failover đúng cách.

3. Rolling update

Deployment dùng Pod template hash để tạo ReplicaSet revision. Khi template đổi, controller scale ReplicaSet mới lên và ReplicaSet cũ xuống. Hai knob quan trọng là maxSurgemaxUnavailable; cùng với readiness, minReadySeconds, termination grace và capacity cluster, chúng quyết định availability thực tế trong rollout.

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0
minReadySeconds: 10
revisionHistoryLimit: 10
Failure window: rollout có thể “tiến triển” trong khi error rate business tăng, nếu readiness quá nông hoặc traffic chỉ chạm một số path. Controller completion không thay thế canary, SLI, synthetic check và quan sát downstream.

4. Zero downtime

“Zero downtime” là property end-to-end, không phải một flag của Deployment. Nó cần đủ capacity surge, readiness đúng, endpoint propagation/draining, shutdown graceful, application/schema backward-compatible và rollout policy phù hợp.

Failure modeBiểu hiệnMitigation / signal cần xem
Thiếu surge capacityPod mới Pending, rollout đứng hoặc phải hạ Pod cũ trướcNode allocatable, Pending reason, scheduler events, quota
Readiness saiTraffic vào Pod chưa warm-up hoặc dependency chưa usableProbe latency, endpoint count, 5xx, startup/readiness transitions
Termination quá nhanhConnection bị reset, request đang chạy mấtGraceful TERM, preStop khi cần, drain duration, in-flight request count
Schema/app không tương thíchOld/new version chạy song song nhưng failExpand/contract migration, compatible API/event schema
Single replicaDễ có gap dù rollout config “đẹp”Replicas, topology spread, SLO requirement và maintenance plan

PodDisruptionBudget (PDB) chủ yếu giới hạn voluntary disruptions do cluster administration. Đừng xem PDB là cơ chế điều khiển Deployment rolling update. Với workload có quorum, budget cần phản ánh số replica tối thiểu thực sự cần để hệ thống còn hoạt động.

5. Jobs

Job dành cho finite work. Pod của Job có thể được retry hoặc thậm chí cùng chương trình có thể được khởi động hơn một lần trong một số tình huống, vì vậy task và external side effect cần idempotent hoặc có deduplication/reconciliation.

CronJob

CronJob tạo Job theo schedule. Cần quyết định concurrencyPolicy (Allow, Forbid hoặc Replace), startingDeadlineSeconds, history limits và timeZone. Scheduling là approximate: có trường hợp Job có thể được tạo hai lần hoặc không được tạo, nên task vẫn cần idempotency.

Operational rule: monitor không chỉ trạng thái Succeeded/Failed mà cả job age, missed schedule, retry count, execution duration, queue/backlog ngoài Kubernetes và side-effect reconciliation.

6. Rollback

Rollback Deployment chỉ đưa Pod template về revision trước. Nó không tự rollback database schema/data, message đã publish, email đã gửi, payment/external API side effect hoặc Config/Secret bên ngoài revision đó.

7. Production checklist

Tài liệu tham khảo: Workload Controllers · Deployments · StatefulSets · DaemonSet · Jobs · CronJob · PodDisruptionBudget