目录
RC、RS、Deployment 区别:
- RC:用来确保容器应用的副本数始终保持在用户定义的数量,如果有容器异常退出,就会自动创建新Pod来补充,超过定义数量的Pod也会被销毁;
- RS:代替RC的控制器,与RC功能一样,多了selector,官方推荐RS或Deployment;
- Deployment:Deployment可以通过RS去创建管理Pod,且可以通过不同的RS来实现滚动更新,当前最常用的控制器就是Deployment;
Deployment 功能:
- 创建RS和Pod;
- 滚动升级和快速回滚;
- 扩容缩容;
- 暂停继续;
Deployment yaml:
# cat 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:v1
ports:
- containerPort: 80
Deployment 操作:
创建deployment:
# kubectl apply -f nginx-deployment.yaml
查看deployment:
# kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 0 0 0 1s
过几秒再看
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 18s
- DESIRED:预期的副本数
- CURRENT:已创建的副本数(升级策略不同,可能大于预期副本数)
- UP-TO-DATE:新创建的副本数(滚动更新时会创建新的副本)
- AVAILABLE:当前可用的副本数
查看RS:
# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-2035384211 3 3 0 18s
更新Deployment:
# kubectl set image deployment/nginx-deployment nginx=nginx:1.18.1
yaml方式更新:
# kubectl edit deployment/nginx-deployment
wq保存后自动更新副本
查看rollout滚动更新状态:
# kubectl rollout status deployment/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out
这时查看RS会发现有两组RS,一组的pod慢慢会变成0
回退Deployment:
先查看升级的历史记录
# kubectl rollout history deployment/nginx-deployment
回退到历史版本
回退到当前版本的前一版本
# kubectl rollout undo deployment/nginx-deployment
回退到指定历史版本
# kubectl rollout undo deployment/nginx-deployment --to-revision=2
默认保留所有版本,如果 .spec.revisonHistoryLimit 被设置为0,则不允许回退;
扩容缩容Deployment:
# kubectl scale deployment nginx-deployment --replicas 10
暂停恢复Deployment:
暂停
# kubectl rollout pause deployment/nginx-deployment
恢复
# kubectl rollout resume deploy nginx