Kubernetes Deployment 完全指南:声明式更新 Pod 与 ReplicaSet
Kubernetes Deployment 完全指南声明式更新 Pod 与 ReplicaSet一、Deployment 核心概念Deployment 是 Kubernetes 中声明式更新的核心控制器为 Pod 和 ReplicaSetReplication Controller 的升级版提供自动化管理能力。其核心价值在于用户只需定义目标状态Deployment Controller 会自动将实际状态同步至目标状态无需手动操作底层 ReplicaSet 或 Pod。关键原则禁止手动管理 Deployment 创建的 ReplicaSet否则会与控制器冲突所有更新操作如镜像升级、配置修改均通过 Deployment 声明而非直接操作 Pod/ReplicaSet支持全生命周期管理创建、更新、回滚、扩容、暂停 / 恢复、清理历史版本二、Deployment 典型用例创建 ReplicaSet 与 Pod通过 Deployment 定义副本数自动创建 ReplicaSet 并调度 Pod声明式更新 Pod修改 Pod 模板如镜像版本触发滚动更新回滚不稳定版本当更新失败时快速回退至历史稳定版本弹性扩容手动或通过 HPA 自动调整 Pod 副本数应对负载变化批量修复配置暂停 Deployment 后批量修改 Pod 模板恢复后统一生效清理历史 ReplicaSet自动或手动删除无用的旧版本 ReplicaSet三、实操指南从创建到维护1. 创建 DeploymentNginx 示例# 下载官方示例文件并创建 Deployment--record 记录操作日志用于后续回滚 kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record验证创建结果# 查看 Deployment 状态DESIRED期望副本数AVAILABLE可用副本数 kubectl get deployments # 输出示例 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 3 3 3 3 18s # 查看自动创建的 ReplicaSet命名规则Deployment名称-pod模板hash值 kubectl get rs # 查看 Pod自动携带 pod-template-hash 标签避免名称冲突 kubectl get pods --show-labels2. 核心配置说明Deployment 配置文件的关键字段spec.replicas期望 Pod 副本数默认 1spec.templatePod 模板必须包含唯一标签如appnginxspec.selector标签选择器需与 Pod 模板标签匹配否则创建失败spec.strategy更新策略默认 RollingUpdate 滚动更新maxUnavailable更新过程中最大不可用 Pod 数默认 1 或 25%maxSurge更新过程中最大超额 Pod 数默认 1 或 25%3. 更新 Deployment镜像升级示例# 方式1直接修改镜像 kubectl set image deployment/nginx-deployment nginxnginx:1.9.1 # 方式2编辑 Deployment 配置文件适合多字段修改 kubectl edit deployment/nginx-deployment监控更新进度kubectl rollout status deployment/nginx-deployment # 成功输出deployment nginx-deployment successfully rolled out4. 回滚 Deployment应对更新失败当更新后 Pod 异常如镜像拉取失败、启动报错需回滚至历史版本# 1. 查看更新历史--record 记录的操作会显示在 CHANGE-CAUSE kubectl rollout history deployment/nginx-deployment # 2. 查看指定版本详情如版本 2 kubectl rollout history deployment/nginx-deployment --revision2 # 3. 回滚至最近稳定版本 kubectl rollout undo deployment/nginx-deployment # 4. 回滚至指定版本如版本 2 kubectl rollout undo deployment/nginx-deployment --to-revision25. 扩容与缩容# 手动扩容至 10 个副本 kubectl scale deployment nginx-deployment --replicas10 # 启用 HPA 自动扩容CPU 利用率 80% 触发副本数 10-15 之间 kubectl autoscale deployment nginx-deployment --min10 --max15 --cpu-percent806. 暂停与恢复 Deployment批量修改配置时避免多次触发更新# 暂停 Deployment kubectl rollout pause deployment/nginx-deployment # 执行多次修改如更新镜像、调整资源限制 kubectl set image deployment/nginx-deployment nginxnginx:1.9.1 kubectl set resources deployment nginx-deployment -cnginx --limitscpu200m,memory512Mi # 恢复 Deployment触发一次更新 kubectl rollout resume deployment/nginx-deployment四、关键特性与注意事项1. Pod-template-hash 标签由 Deployment 自动添加用于区分不同版本的 Pod/ReplicaSet基于 Pod 模板的哈希值生成模板变更时哈希值同步更新禁止手动修改该标签否则会导致控制器无法识别 Pod2. 滚动更新策略默认策略RollingUpdate确保更新过程中服务不中断先创建新 Pod再删除旧 Pod同时满足可用 Pod 数 ≥ 期望数 - maxUnavailable和总 Pod 数 ≤ 期望数 maxSurge3. 状态判断Progressing进行中创建新 ReplicaSet、扩容 / 缩容、新 Pod 就绪Complete完成所有 Pod 均为最新版本且可用无旧 Pod 残留Failed失败超过progressDeadlineSeconds仍未完成更新如镜像拉取失败、配额不足4. 清理历史版本通过spec.revisionHistoryLimit配置保留的历史版本数默认保留所有spec: revisionHistoryLimit: 5 # 保留最近 5 个版本其余自动清理五、Deployment 优势与替代方案对比特性Deployment推荐kubectl rolling update旧方案操作方式声明式配置驱动命令式客户端驱动回滚能力支持任意历史版本回滚仅支持回滚至上一版本附加功能暂停 / 恢复、扩容、清理历史无稳定性集群级控制器更可靠客户端工具易中断