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.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
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 --record
deployment "nginx-deployment" created
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 12m正常之后,将nginx的版本进行升级,从1.7升级到1.9。
第一种方法,直接set镜像:
kubectl set image deployment/nginx-deployment nginx=nginx:1.9
deployment "nginx-deployment" image updated
第二种方法,直接edit:
kubectl edit deployment/nginx-deployment
deployment "nginx-deployment2" edited
查看Deployment的变更信息(以下信息得以保存,是创建时候加的“--record”这个选项起的作用):
kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment":
REVISION CHANGE-CAUSE
1 kubectl create -f docs/user-guide/nginx-deployment.yaml --record
2 kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
3 kubectl set image deployment/nginx-deployment nginx=nginx:1.91
kubectl rollout history deployment/nginx-deployment --revision=2
deployments "nginx-deployment" revision 2
Labels: app=nginx
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的主要内容,如果未能解决你的问题,请参考以下文章
SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)(代