k8s-day8-名词解释:Deployment

Posted linux言叙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s-day8-名词解释:Deployment相关的知识,希望对你有一定的参考价值。

2.6 Deployment

Deployment 为 Pods 和 Replica Sets(升级版Replication Controller) 提供声明式的更新能力。其内部使用RS来实现目的,它可以随时获得当前pod部署的进度。Deployment主要职责同样是为了保证pod的数量和健康,90%的功能与Replication Controller完全一样,可以看做新一代的Replication Controller。但是,它又具备了Replication Controller之外的新特性:

事件和状态查看:可以查看Deployment的升级详细进度和状态。

回滚:当升级pod镜像或者相关参数的时候发现问题,可以使用回滚操作回滚到上一个稳定的版本或者指定的版本。

版本记录: 每一次对Deployment的操作,都能保存下来,给予后续可能的回滚使用。

暂停和启动:对于每一次升级,都能够随时暂停和启动。

多种升级方案:Recreate----删除所有已存在的pod,重新创建新的; RollingUpdate----滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

2.6.1滚动升级/回滚

参考文档:http://docs.kubernetes.org.cn/317.html

相比于RC,Deployment直接使用kubectl edit deployment/deploymentName 或者kubectl set方法就可以直接升级(原理是Pod的template发生变化,例如更新label、更新镜像版本等操作会触发Deployment的滚动升级)。操作示例:首先 我们同样定义一个nginx-deployment.yaml的文件,副本数量为3

vi nginx-deployment.yamlapiVersion: extensions/v1beta1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 3 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80

创建deployment:

kubectl create -f nginx-deployment.yaml --recorddeployment "nginx-deployment" createdkubectl get deploymentsNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEnginx-deployment 3 3 3 3 12m正常之后,将nginx的版本进行升级,从1.7升级到1.9

第一种方法,直接set镜像:

kubectl set image deployment/nginx-deployment nginx=nginx:1.9deployment "nginx-deployment" image updated

第二种方法,直接edit:

kubectl edit deployment/nginx-deploymentdeployment "nginx-deployment2" edited

查看Deployment的变更信息(以下信息得以保存,是创建时候加的“--record”这个选项起的作用):

kubectl rollout history deployment/nginx-deploymentdeployments "nginx-deployment":REVISION CHANGE-CAUSE1 kubectl create -f docs/user-guide/nginx-deployment.yaml --record2 kubectl set image deployment/nginx-deployment nginx=nginx:1.9.13 kubectl set image deployment/nginx-deployment nginx=nginx:1.91 kubectl rollout history deployment/nginx-deployment --revision=2deployments "nginx-deployment" revision 2 Labels: app=nginx pod-template-hash=1159050644 Annotations: kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 Containers: nginx: Image: nginx:1.9.1 Port: 80/TCP QoS Tier: cpu: BestEffort memory: BestEffort Environment Variables: <none>  No volumes.

最后介绍下Deployment的一些基础命令。

kubectl describe deployments  #查询详细信息,获取升级进度

kubectl rollout pause deployment/nginx-deployment2  #暂停升级

kubectl rollout resume deployment/nginx-deployment2  #继续升级

kubectl rollout undo deployment/nginx-deployment2  #升级回滚

kubectl scale deployment nginx-deployment --replicas 10  #弹性伸缩Pod数量

 

关于多重升级,当你创建了一个nginx1.7的Deployment,要求副本数量为5之后,Deployment Controller会逐步的将5个1.7的Pod启动起来;当启动到3个的时候,你又发出更新Deployment中Nginx到1.9的命令;这时Deployment Controller会立即将已启动的3个1.7Pod杀掉,然后逐步启动1.9的Pod。Deployment Controller不会等到1.7的Pod都启动完成之后,再依次杀掉1.7,启动1.9。

    

参考文档:

官网:

https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/


以上是关于k8s-day8-名词解释:Deployment的主要内容,如果未能解决你的问题,请参考以下文章

k8s-day3-名词解释:master

k8s-day5-名词解释:pod

k8s-day12-名词解释:Volume(共享存储)

SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)(代

k8s-day13-K8S集群部署

Deployment.spec.selector.matchLables实验解释