Deployment:一个Deployment控制器为Pods和ReplicaSets提供描述性的更新方式。
示列:
Deployment的定义除了kind的类型区别同RS没区别。那么为什么在有RS的基础上,还要继续产生这样一个新的控制器的概念。其实是一次RS的升级,相比于RS,它可以更好的支持 滚动升级,以及升级会退
kubectl rollout命令介绍
rollout用来管理可回滚资源,可回滚资源有deployments daemonsets statefulsets,所以rollout其实这种可回滚资源的代称可以理解为。
$ kubectl rollout SUBCOMMAND
其中SUBCOMMAND 经常使用的有histroy pause/resume restart status undo等
kubectl rollout history (TYPE NAME | TYPE/NAME) [flags] 查看资源历史状态修改。
kubectl rollout pause/resume RESOURCE 暂停恢复资源,只支持deployments
kubectl rollout status (TYPE NAME | TYPE/NAME) [flags] 显示资源创建状态。
创建,更新,回滚
创建
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
运行kubectl get deployments
以检查 Deployment 是否已创建。如果仍在创建 Deployment ,则输出以下内容:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 0 0 0 1s
运行kubectl rollout status deployment.v1.apps/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment.apps/nginx-deployment successfully rolled out
更新
敏捷开发过程中,业务镜像是不断变化的,这就需要需要资源控制器能够提供升级镜像的方式
1.使用命令行
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
2.可通过编辑yaml文件,手动修改镜像为ngix:1.9.1
Deployment 可确保在更新时仅关闭一定数量的 Pods。默认情况下,它确保至少 75%所需 Pods 运行(25%最大不可用)。也就说假如副本数量为3的话,同时最多只能有一个新奖项pod的产生。
回滚
当我们发现新镜像业务问题或者配置文件修改错误,那么这个时候其实Deployment是可用的,只不过达到期待副本数量,参考上方75%原则。
1.查看所有历史状态修改
kubectl rollout history deployment/nginx-deployment
输出
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
2.查看特定revesion状态
kubectl rollout history deployment/nginx-deployment --revision=2
3.撤销更新
如果是最近一次的修改
kubectl rollout undo deployment.v1.apps/nginx-deployment
会滚到特定版本
kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2