前言
K8S的滚动更新功能,一次可以更新部分副本,启动一部分pod,停止一部分pod,最后完成所有副本的更新,在升级的过程中,能够保证服务一直在线,达到零停机,保障了业务的稳定性。
1.准备yaml文件
如下httpd2_v1.ymal,httpd2_v2.ymal,httpd2_v3.ymal三个配置文件,分别对应httpd镜像2.4.16,2.4.17,2.4.18
httpd2_v1.ymal
kind: Deployment
metadata:
name: httpd
spec:
revisionHistoryLimit: 10
replicas: 2
template:
metadata:
labels:
run: httpd
spec:
containers:
- name: httpd
image: httpd:2.4.16
ports:
- containerPort: 80
httpd2_v2.ymal配置文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: httpd
spec:
revisionHistoryLimit: 10
replicas: 2
template:
metadata:
labels:
run: httpd
spec:
containers:
- name: httpd
image: httpd:2.4.17
ports:
- containerPort: 80
httpd2_v3.ymal
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: httpd
spec:
revisionHistoryLimit: 10
replicas: 2
template:
metadata:
labels:
run: httpd
spec:
containers:
- name: httpd
image: httpd:2.4.18
ports:
- containerPort: 80
2.版本更新
分别执行如下命令--record的作用是将当前版本记录到revisionHistory中去,然后我们根据revision历史记录可以去进行版本回滚
kubectl apply -f httpd2_v1.ymal --record
kubectl get replicaset -o wide
kubectl apply -f httpd2_v2.ymal --record
kubectl get replicaset -o wide
kubectl apply -f httpd2_v3.ymal --record
kubectl get replicaset -o wide
kubectl rollout history deployment httpd -----查看历史版本
如图REVISION显示的记录id,CHANGE-CAUSE显示的是版本更新的命令
3.版本回滚
kubectl rollout undo deployment httpd --to-revision=1 ----回滚到记录为1的版本,也就是http的2.4.16版本
再次查看版本记录,也会相应的发生变动
注:使用版本更新和回滚功能,在kubectl apply时需要加--record参数。