本实验分为四个阶段:快速创建、弹性伸缩、滚动更新、故障回滚。
# 阶段一:快速拉起
在考试中,除非题目明确要求创建 Pod ,否则一律优先使用 Deployment,因为它具备自愈金额扩缩容能力。
1、快速创建一个 Pod(仅用于临时测试)
kubectl run nginx-pod --image=inginx:1.23 --labels="app=test"
2、快速创建一个 Deployment(标准做法)
## 创建一个 Deployment 的部署,包含 3 个副本。
kubectl create deployment web-deploy --image=nginx:1.23 -replicas=3
3、验证分布
## 查看这 3 个 Pod 是不是均匀分布在 Node1 和 Node2 上
kubectl get pods -o wide
# 阶段二:弹性伸缩(Scale)
1、将副本数从 3 扩展到 6:
kubectl scale deployment web-deploy --replicas=6
2、验证:
## 观察 Pod 数量变化
kubectl get pods -w
3、缩减副本(模拟业务降速)
kubectl scale deployment web-deploy --replicas=2
# 阶段三:滚动更新(Rollout)
现在我们把业务版本从 1.23 升级到 1.24。Deployment 的强大之处在于会逐个替换旧 Pod,确保业务不断更。
1、执行更新命令
## 直接修改容器镜像
kubectl set image deployment/web-deploy nginx=nginx:1.24 --record
–record 标志会把这条命令记录在历史中,方便回滚查看
2、实时观看滚动过程:
kubectl get pods -l app=web -w
kubectl rollout status deployment/web-deploy
会看到 Pod 正在一个接一个被创建(ContainerCreating)和删除(Terminating)。
3、查看更新历史
kubectl rollout history deployment/web-deploy
# 阶段四:故障回滚(Undo/Rollback)
这里假设我们不小心更新一个错误镜像,导致业务挂了
1、模拟错误更新
## 使用一个不存在的镜像版本
kubectl set image deployment/web-dploy nginx=nginx:9.9.9 --record
2、检查状态
kubectl get pods
会看到 ImagePullBackOff。
3、紧急回滚到上一个版本
kubectl rollout undo deployment/web-deploy
4、验证是否恢复
## 查看 Pod 详情,确认镜像变回了 1.24
kubectl describe pod <某个web-deploy开头的pod名> grep Image:
# 清理
kubectl delete deployment web-deploy
kubectl delete pod nginx-pod
# 相关总结
操作
命令行 (Imperative)
说明
创建
kubectl create deployment <name> --image=<img1>
快速拉起控制器
扩缩容
kubectl scale deployment <name> --replicas=N
改变 Pod 数量
更新镜像
kubectl set image deploy/<name> <container>=<img2>
触发滚动更新
查看状态
kubectl rollout status deploy/<name>
监控更新进度
回滚
kubectl rollout undo deploy/<name>
撤销上一次操作
历史
kubectl rollout history deploy/<name>
查看版本记录