玩转k8s(五)—— Rolling Update滚动更新
介绍k8s的Rolling Update滚动更新功能
实践
(1)部署三个副本应用,初始镜像为httpd:2.2.31,然后将其更新到httpd:2.2.32,httpd:2.2.31的配置文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
spec:
replicas: 3
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd # 这里是为Pod分配的标签
spec:
containers:
- name: httpd
image: httpd:2.2.31
ports:
- containerPort: 80
(2)通过apply部署
zy@k8s-master:~$ kubectl apply -f httpd.yml
deployment.apps/httpd-deployment created
(3)查看http-deployment
zy@k8s-master:~$ kubectl get deployments.apps httpd-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deployment 3/3 3 3 9m47s httpd httpd:2.2.31 app=httpd
(4)将版本从31改成32重新apply
zy@k8s-master:~$ kubectl get deployments.apps httpd-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deployment 3/3 1 3 16m httpd httpd:2.2.32 app=httpd
(5)查看replicaset
可以看到之前的 httpd-deployment-6b96d79d79 的三个httpd:2.2.31 pod 已经被 httpd-deployment-7d98db6f46 的三个httpd:2.2.32 pod 替换了。
zy@k8s-master:~$ kubectl get replicaset -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
httpd-deployment-6b96d79d79 0 0 0 21m httpd httpd:2.2.31 app=httpd,pod-template-hash=6b96d79d79
httpd-deployment-7d98db6f46 3 3 3 5m32s httpd httpd:2.2.32 app=httpd,pod-template-hash=7d98db6f46
回滚
kubectl apply每次更新应用时,k8s都会记录下当前的配置,保存为一个版本,这样就可以回滚到某个特定的revision。
默认配置下,k8s只会保留最近的几个版本,可以在deployment的配置文件中通过revisonHistoryLimit属性增加revision数量。
实践:
(1)写三个配置文件:
httpd.yml对应2.4.16
httpd1.yml对应2.4.17
httpd2.yml对应2.4.18
zy@k8s-master:~$ cat httpd.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deployment
spec:
replicas: 3
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd # 这里是为Pod分配的标签
spec:
containers:
- name: httpd
image: httpd:2.4.16
ports:
- containerPort: 80
(2)apply应用
--record 的作用是将当前命令记录到revision记录中,这样我们就可以知道每一个revision对应的是哪个配置文件了
zy@k8s-master:~$ kubectl apply -f httpd.yml --record
deployment.apps/httpd-deployment configured
zy@k8s-master:~$ kubectl get deployment httpd-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deployment 3/3 1 3 32m httpd httpd:2.4.16 app=httpd
zy@k8s-master:~$ kubectl apply -f httpd1.yml --record
deployment.apps/httpd-deployment configured
zy@k8s-master:~$ kubectl get deployment httpd-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deployment 3/3 1 3 33m httpd httpd:2.4.17 app=httpd
zy@k8s-master:~$ kubectl apply -f httpd2.yml --record
deployment.apps/httpd-deployment configured
zy@k8s-master:~$ kubectl get deployment httpd-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deployment 3/3 1 3 33m httpd httpd:2.4.18 app=httpd
(3)通过 kubectl rollout history deployment httpd-deployment 查看revison历史记录:
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 kubectl apply --filename=httpd.yml --record=true
4 kubectl apply --filename=httpd1.yml --record=true
5 kubectl apply --filename=httpd2.yml --record=true
CHANGE-CAUSE就是 --record 的结果。
(4)如果要回滚到某个版本,比如 revision3,可以执行命令kubectl rollout undo deployment httpd-deployment --to-revision=3
可以看到版本又回到了 2.4.16
zy@k8s-master:~$ kubectl rollout undo deployment httpd-deployment --to-revision=3
deployment.apps/httpd-deployment rolled back
zy@k8s-master:~$ kubectl get deployment httpd-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
httpd-deployment 3/3 3 3 40m httpd httpd:2.4.16 app=httpd
(5)此时,revision的历史记录也会发生变化
revision3 变成了 revision6。
zy@k8s-master:~$ kubectl rollout history deployment httpd-deployment
deployment.apps/httpd-deployment
REVISION CHANGE-CAUSE
1 <none>
2 <none>
4 kubectl apply --filename=httpd1.yml --record=true
5 kubectl apply --filename=httpd2.yml --record=true
6 kubectl apply --filename=httpd.yml --record=true
更多推荐
所有评论(0)