一、滚动更新
1、编写yml:k8s_nginx_deployment_1.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dm-1
spec:
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx
image: test/nginx:v1
ports:
- containerPort: 80
2、常用操作
// 查询rc
kubectl get deployment
// 修改副本数为4个
kubectl scale deployment nginx-dm-1 --replicas=4 # nginx-dm-1(metadata.name)
3、启动成功
MacBook-Air:test chenfenli$ kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-dm-1 4/4 4 4 6m40s nginx test/nginx:v1 app=nginx1
MacBook-Air:test chenfenli$
MacBook-Air:test chenfenli$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dm-1-669dc865bd-8rdv7 1/1 Running 0 7m12s 10.1.0.247 docker-desktop <none> <none>
nginx-dm-1-669dc865bd-9dn2b 1/1 Running 0 4m5s 10.1.0.250 docker-desktop <none> <none>
nginx-dm-1-669dc865bd-fsndb 1/1 Running 0 7m12s 10.1.0.249 docker-desktop <none> <none>
nginx-dm-1-669dc865bd-mg7wz 1/1 Running 0 7m12s 10.1.0.248 docker-desktop <none> <none>
MacBook-Air:test chenfenli$
4、滚动升级:k8s_nginx_deployment_2.yml
升级策略
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
- minReadySeconds:Kubernetes在等待设置的时间后才进行升级,如果没有设置该值,Kubernetes会假设该容器启动起来后就提供服务了,在某些极端情况下可能会造成服务不正常运行。
- maxSurge:升级过程中最多可以比原先设置多出的POD数量。例如:maxSurage=1,replicas=5,则表示Kubernetes会先启动1一个新的Pod后才删掉一个旧的POD,整个升级过程中最多会有5+1个pod。
- maxUnavaible:升级过程中最多有多少个POD处于无法提供服务的状态,当maxSurge不为0时,该值也不能为0。例如:maxUnavaible=1,则表示Kubernetes整个升级过程中最多会有1个pod处于无法服务的状态。
最终文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dm-1
spec:
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
replicas: 3
selector:
matchLabels:
app: nginx1
template:
metadata:
labels:
app: nginx1
spec:
containers:
- name: nginx
image: test/nginx:v2
ports:
- containerPort: 80
执行滚动更新:
MacBook-Air:test chenfenli$ kubectl apply -f k8s_nginx_deployment_2.yml --record=true
deployment.apps/nginx-dm-1 configured
MacBook-Air:test chenfenli$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dm-1-669dc865bd-fsndb 1/1 Terminating 0 13m 10.1.0.249 docker-desktop <none> <none>
nginx-dm-1-669dc865bd-mg7wz 1/1 Terminating 0 13m 10.1.0.248 docker-desktop <none> <none>
nginx-dm-1-747f7c67bf-lg7pc 1/1 Running 0 28s 10.1.0.251 docker-desktop <none> <none>
nginx-dm-1-747f7c67bf-msrzw 1/1 Running 0 29s 10.1.0.252 docker-desktop <none> <none>
nginx-dm-1-747f7c67bf-nlns7 0/1 ContainerCreating 0 8s <none> docker-desktop <none> <none>
MacBook-Air:test chenfenli$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dm-1-747f7c67bf-lg7pc 1/1 Running 0 38s 10.1.0.251 docker-desktop <none> <none>
nginx-dm-1-747f7c67bf-msrzw 1/1 Running 0 39s 10.1.0.252 docker-desktop <none> <none>
nginx-dm-1-747f7c67bf-nlns7 1/1 Running 0 18s 10.1.0.253 docker-desktop <none> <none>
MacBook-Air:test chenfenli$
二、回滚
1、查看历史版本
MacBook-Air:test chenfenli$ kubectl rollout history deployment nginx-dm-1
deployment.apps/nginx-dm-1
REVISION CHANGE-CAUSE
1 <none>
2 <none>
MacBook-Air:test chenfenli$
2、回退到指定版本:name的发生了改变
// kubectl rollout undo deployment nginx-dm-1 回滚到上一个版本
// kubectl rollout undo deployment nginx-dm-1 --to-revision=1 回滚到指定版本
MacBook-Air:test chenfenli$ kubectl rollout undo deployment nginx-dm-1 --to-revision=1
deployment.apps/nginx-dm-1 rolled back
MacBook-Air:test chenfenli$
MacBook-Air:test chenfenli$ kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-dm-1 3/3 3 3 30m nginx test/nginx:v1 app=nginx1
MacBook-Air:test chenfenli$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dm-1-669dc865bd-5g8ss 1/1 Running 0 2m29s 10.1.1.0 docker-desktop <none> <none>
nginx-dm-1-669dc865bd-bg74b 1/1 Running 0 2m47s 10.1.0.255 docker-desktop <none> <none>
nginx-dm-1-669dc865bd-lt59w 1/1 Running 0 2m46s 10.1.0.254 docker-desktop <none> <none>
MacBook-Air:test chenfenli$