生产就绪检查清单
高可用
资源
安全
可观测
控制平面与 etcd 高可用拓扑
两种主流拓扑:- 堆叠式(Stacked):etcd 与控制平面组件跑在同一组节点上。部署简单,3 台机器起步,适合大多数场景。
- 外部 etcd(External):etcd 独立成集群,与控制平面解耦。隔离性更好、可单独扩缩,但要维护更多机器。
中小规模选堆叠式。当 etcd I/O 成为瓶颈,或需要独立保护数据层时,再考虑外部 etcd。
应用发布最佳实践
健康检查:readiness 与 liveness 的区别
- readinessProbe:失败时把 Pod 摘出 Service 流量,但不重启。用于「暂时不能接客」。
- livenessProbe:失败时重启容器。用于「已经病了,重开治百病」。
PodDisruptionBudget
PDB 保证主动运维(drain、升级)时始终有最少可用副本:优雅停机
preStop,再发 SIGTERM,超时后 SIGKILL。应用要捕获 SIGTERM 完成在途请求。
资源规划建议
- requests 必配:它是调度的依据,不配 requests 的 Pod 会被随意堆叠,节点超载时最先被驱逐。
- limit 策略:内存 limit 必须配(防 OOM 拖垮节点);CPU limit 谨慎配,过紧会导致 throttling。
- LimitRange:给 namespace 设置容器默认 requests/limits,兜底忘配的应用。
- ResourceQuota:限制 namespace 总资源,防止单个团队吃光集群。
GitOps 与 CI/CD
两个主流 GitOps 工具:- ArgoCD:带 Web 界面,可视化好,适合团队协作。
- Flux:更轻量,纯 CRD 驱动,适合平台工程深度定制。
kubectl apply 漂移配置。
多环境管理
- namespace 划分:小团队按环境分(
dev/staging/prod),配合 RBAC 和 ResourceQuota 隔离。 - Kustomize:适合环境间差异小的场景,用 overlay 覆盖补丁,原生集成在
kubectl -k。 - Helm:适合复杂应用和需要对外分发的场景,用 values 文件区分环境。
升级与容量规划经验法则
- 版本支持策略:社区维护最近 3 个小版本(N-2),生产集群保持在支持窗口内,每年至少升级一次。
- 预留缓冲:节点资源按峰值负载的 60%~70% 规划,预留 30% 以上缓冲应对突发和节点故障重建。
- 容量推演:用
kubectl top和 Prometheus 历史数据推算增长曲线,提前一个季度规划扩容。