上一篇博客写了k8s replicaset与deployment 区别。主要写一下 deployment 一些功能
还是以一个文件部署应用开始,所有的应用部署都以 nginx 为例,部署到🤮
- 部署文件
nginx-deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: nginx01
name: nginx01
spec:
replicas: 3
selector:
matchLabels:
run: nginxhh
template:
metadata:
creationTimestamp: null
labels:
run: nginxhh
spec:
containers:
- image: tomcat:8
name: nginxhh
status: {}
- 回滚
# 部署
[root@guanzc-130 kubernetes]# kubectl apply -f nginx-deploy.yml
# 修改部署
[root@guanzc-130 kubernetes]# kubectl edit deploy nginx01
# 查看部署版本
[root@guanzc-130 kubernetes]# kubectl rollout history deployment nginx01
deployment.apps/nginx01
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 <none> # 部署了三次
# 部署状态查看
[root@guanzc-130 kubernetes]# kubectl rollout status deploy nginx01
deployment "nginx01" successfully rolled out
#回滚到版本1
[root@guanzc-130 kubernetes]# kubectl rollout undo depoly nginx01 --to-revision=1
[root@guanzc-130 kubernetes]# kubectl rollout history deploy nginx01
deployment.apps/nginx01
REVISION CHANGE-CAUSE
2 <none>
3 <none>
4 <none>
[root@guanzc-130 kubernetes]# kubectl get pod # 查看状态
版本由1变为4 回滚成功
- 更新属性配置
spec参数设置
- revisionHistoryLimit: 记录多少条更新历史
...
spec:
replicas: 3
revisionHistoryLimit: 3 # 记录 3条更新
selector:
matchLabels:
run: nginxhh
template:
...
- paused:一次升级过程中可能要经过几次小的变更,每次变更都会产生一个新的版本号,如果不想在中间过程产生版本号,全部更新完成后,只生成一个版本号,开启 paused 配置
#暂停记录
kubectl rollout pause deployment nignx01
# 镜像升级、修改资源配置、修改副本数等操作,版本会发生改变
kubectl scal --replicas=5 deploy nginx01 # 扩容
kubectl edit deploy nginx01 #修改镜像
# 查看版本记录
kubectl rollout history deploy nginx01
# 版本状态
kubectl rollout status deploy nginx01
# 以上操作发现版本并未发生变化,关闭暂停后,以上操作会执行,并生成一个新的版本
kubectl rollout resume deployment nginx01
- 回滚策略
deploument 支持回滚策略有两种:
- Recreate:新建升级,之前应用全部停掉,重新创建升级,
升级期间服务不可用
,适合停机升级- RollingUpdate: 滚动升级,
升级期间服务可用
Recreate 配置
spec:
replicas: 3
revisionHistoryLimit: 3
strategy:
type: Recreate # 创建新的升级
selector:
matchLabels:
run: nginxhh
template:
RollingUpdate 滚动升级,设置不同策略,保证不停机升级
spec:
replicas: 3
revisionHistoryLimit: 3
strategy:
type: RollingUpdate
maxSurge: 10 #最大增量
maxUnavailable: 2 # 最大不可用
selector:
matchLabels:
run: nginxhh
template:
总结
deployment 进行版本记录、更新、恢复、回滚功能