在Kubernetes(K8S)集群环境中,Deployment是一种高级资源控制器,为应用程序的部署、扩展和更新提供了声明式管理能力。Deployment通过管理ReplicaSet(副本集)间接控制Pod实例,实现了丰富的功能。站长百科本文将主要介绍Deployment在Kubernetes上的全方位使用指南。
Deployment通过管理ReplicaSet(副本集)间接控制Pod实例实现的功能如下:
1、创建并管理指定数量的Pod副本
2、自动替换不健康的Pod实例
3、支持滚动更新(Rolling Update)实现零宕机升级
4、提供版本控制机制,支持回滚到任意历史版本
5、实现Pod数量的水平扩展与收缩
6、自动清理不再需要的旧版本资源
一、体验Deployment
1、创建Deployment资源
使用kubectl命令行工具快速创建一个Nginx应用的Deployment:
kubectl create deploy nginx-deploy –image=nginx
2、查看Deployment状态
会得到一个名为 nginx-deploy 的deploy资源,而我们知道Deployment不直接控制Pod,是先控制ReplicaSe,所以先查看replicaSet资源。
3、查看ReplicaSet资源
以上名字是有规律的,在 nginx-deploy 后面加上了随机字符-6c758c8d46作为replicaSet的资源名称。
4、查看Pod实例
最后发现他们的是有联系,在nginx-deploy-6c758c8d46后面又多了随机字符作为pod的名称。
5、测试Pod自动恢复机制
手动删除一个Pod实例:
kubectl delete pods nginx-deploy-6c758c8d46-5swnb
再次查看Pod列表:
kubectl get pods
可以看到,Deployment会自动创建一个新的Pod实例来替换被删除的Pod。
6、查看Deployment配置
kubectl get deploy nginx-deploy -o yaml
简化后的Deployment配置示例:
二、滚动更新(Rolling Update)
滚动更新是Deployment的核心特性,允许在不中断服务的情况下逐步更新应用程序版本。更新过程中,新版本Pod逐步增加,旧版本Pod逐步减少,确保服务始终可用。
1、创建Deployment配置文件
创建nginx-deploy.yaml配置文件:
touch nginx-deploy.yaml
编辑内容:
应用配置创建Deployment:
kubectl create -f nginx-deploy.yaml
2、调整副本数量
获取deploy信息:
这里看UP-TO-DATE列(更新数)为1。接下来修改副本数为3。
再次查看状态确认调整成功:
3、执行滚动更新
将Nginx版本从1.14.2更新到1.9.1:
kubectl set image deployment/nginx-deploy nginx=nginx:1.9.1 –record
查看更新状态:
kubectl rollout status deployment nginx-deploy
查看更新过程中的详细信息:
分析日志:
分析更新过程日志:
1、Deployment创建一个新的ReplicaSet (nginx-deploy-754898b577)。
2、新ReplicaSet的副本数逐步增加到3。
3、旧ReplicaSet (nginx-deploy-78d8bf4fd7)的副本数逐步减少到0。
4、整个过程中保持总副本数不变,确保服务不中断。
查看更新后的ReplicaSet状态:
四、版本回滚
1、查看历史版本
kubectl rollout history deployment nginx-deploy
2、查看特定版本详情
kubectl rollout history deployment nginx-deploy –revision=2
3、回滚到上一个版本
kubectl rollout undo deployment nginx-deploy
4、回滚到指定版本
kubectl rollout undo deployment nginx-deploy –to-revision=2
5、调整历史版本保留数量
通过设置.spec.revisionHistoryLimit参数控制保留的历史版本数量(默认为10):
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
revisionHistoryLimit: 5 # 保留5个历史版本
# 其他配置…
五、扩缩容与更新控制
1、扩缩容操作
直接使用命令行调整副本数量:
kubectl scale deployment nginx-deploy –replicas=5
2、更新暂停与恢复
在进行复杂配置变更时,可以暂停更新过程:
kubectl rollout pause deployment nginx-deploy
完成多次配置修改后,恢复更新过程:
kubectl rollout resume deployment nginx-deploy











