1 Deployment 含义
Deployment为Pod和ReplicaSet提供了一个声明式定义方法,用来替代以前的ReplicationController来方便的管理应用。
2 Deployment使用原因
Deployment为Pod和Replica Set提供声明式更新。
3 Deployment创建脚本
创建了一个Replica Set来启动3个tomcat pod
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tomcat-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: tomcat
image: tomcat:7
ports:
- containerPort: 80
4 Deployment使用场景
4.1 定义Deployment来创建Pod和ReplicaSet
脚本类似上面步骤3
4.2 滚动升级和回滚应用
当且仅当Deployment的pod template(例如.spec.template)中的label更新或者镜像更改时被触发rollout。其他更新,例如扩容Deployment不会触发rollout。
例如通过下面这些方法修改出发
4.2.1 通过kubectl命令设置修改触发
kubectl set image deployment/tomcat-deployment tomcat=tomcat:8
deployment "tomcat-deployment" image updated
4.2.2 编辑资源清单脚本修改触发
kubectl edit deployment/tomcat-deployment
deployment "tomcat-deployment" edited
4.2.3 正常手工回滚操作
kubectl rollout undo deployment/tomcat-deployment
4.2.4 升级记录查看
kubectl rollout history deployment/tomcat-deployment
查看单个revision的详细信息
kubectl rollout history deployment/tomcat-deployment --revision=2
回退当前的rollout到之前的版本
kubectl rollout undo deployment/tomcat-deployment --to-revision=2
4.3 扩容和缩容
扩缩容脚本
kubectl scale deployment tomcat-deployment --replicas 10
4.4 暂停和继续Deployment
在触发一次或多次更新前暂停一个Deployment,然后再恢复它。这样你就能多次暂停和恢复Deployment,在此期间进行一些修复工作,而不会触发不必要的rollout。
暂停
kubectl rollout pause deployment/tomcat-deployment
更新Deplyment中的镜像
kubectl set image deploy/tomcat tomcat=tomcat:8
deployment "tomcat-deployment" image updated
恢复,恢复Deployment之前无法回退一个暂停了个Deployment
kubectl rollout resume deploy tomcat
5 Deployment状态
Deployment生命周期状态 progressing 状态, complete 状态,或者fail to progress状态。
5.1 progressing 状态
Kubernetes将执行过下列任务之一的Deployment标记为progressing状态:
Deployment正在创建新的ReplicaSet过程中。
Deployment正在扩容一个已有的ReplicaSet。
Deployment正在缩容一个已有的ReplicaSet。
有新的可用的pod出现。
你可以使用kubectl roullout status命令监控Deployment的进度。
5.2 complete 状态
Kubernetes将包括以下特性的Deployment标记为complete状态:
Deployment最小可用。最小可用意味着Deployment的可用replica个数等于或者超过Deployment策略中的期望个数。
所有与该Deployment相关的replica都被更新到了你指定版本,也就说更新完成。
该Deployment中没有旧的Pod存在。
你可以用kubectl rollout status命令查看Deployment是否完成。如果rollout成功完成,kubectl rollout status将返回一个0值的Exit Code。
5.3 fail to progress状态
你的Deployment在尝试部署新的ReplicaSet的时候可能卡住,用于也不会完成。这可能是因为以下几个因素引起的:
无效的引用
不可读的probe failure
镜像拉取错误
权限不够
范围限制
程序运行时配置错误
最后祝各位小伙伴周末愉快!阅读分享有小收获吧!有好的建议或意见,欢迎下方留言。[呲牙][呲牙]