Deployment 的 典型应用场景 包括:
• 定义 Deployment 来创建 Pod 和 ReplicaSet
• 滚动升级和回滚应用
• 扩容和缩容
• 暂停和继续 Deployment
1、升级版本(滚动更新策略 RollingUpdate)
升级过程:
• 初建deploy时,系统创建一个rs,并按用户的需求创建对应数量的pod副本
• 当更新deploy时,系统创建一个新的rs,并将其副本数扩展到1,将旧的rs缩减为2
• 之后,系统继续按照相同的策略对新旧两个rs进行逐个调整
• 最后,新的rs运行了对应版本的pod副本,旧的rs副本数量则缩减为0
rollingupdate参数:
• maxSurge:最大增激数,更新过程中最多可以比rs预先设定多出的pod数量
• maxUnavailible:最大无效数,最多有几个pod处于Temming
• minReadySeconds:容器内应用的启动时间pod变run状态之后,经过多长时间继续更新下一个pod
#创建deploy
[root@k8s-master ~]#cat web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web
spec:
containers:
- image: nginx:1.14
name: nginx
resources: {}
status: {}
[root@k8s-master ~]# kubectl apply -f web.yaml
deployment.apps/web created
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-65fbc499c9-ppskj 1/1 Running 0 6s
#升级
[root@k8s-master ~]# kubectl set image deploy web nginx=nginx:1.15
deployment.apps/web image updated
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-84576695b6-r6hqw 1/1 Running 0 2s
[root@k8s-master ~]# crictl images |grep nginx
docker.io/library/nginx 1.14 295c7be079025 44.7MB
docker.io/library/nginx 1.15 53f3fd8007f76 44.8MB
docker.io/library/nginx latest 51086ed63d8cb 56.8MB
[root@k8s-master ~]# crictl ps -a |grep nginx
2cf0689897071 53f3fd8007f76 28 seconds ago Running nginx 0 c00c707005b20 web-84576695b6-r6hqw
#查看升级状态
[root@k8s-master ~]# kubectl rollout status deployment web
deployment "web" successfully rolled out
#查看升级历史
[root@k8s-master ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION CHANGE-CAUSE
1 <none>
2 <none>
2、回滚版本
#回滚到上一个版本
[root@k8s-master ~]# kubectl rollout undo deployment web
deployment.apps/web rolled back
[root@k8s-master ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION CHANGE-CAUSE
2 <none>
3 <none>
[root@k8s-master ~]# kubectl rollout status deployment web
deployment "web" successfully rolled out
#回滚到指定版本
[root@k8s-master ~]# kubectl rollout undo deployment web --to-revision=2
deployment.apps/web rolled back
[root@k8s-master ~]# kubectl rollout status deployment web
deployment "web" successfully rolled out
[root@k8s-master ~]# kubectl rollout history deployment web
deployment.apps/web
REVISION CHANGE-CAUSE
3 <none>
4 <none>
3、弹性伸缩(创建副本)
[root@k8s-master ~]# kubectl scale deployment web --replicas=3
deployment.apps/web scaled
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
web-84576695b6-82k92 1/1 Running 0 85s
web-84576695b6-csnfd 1/1 Running 0 2s
web-84576695b6-k82ms 1/1 Running 0 2s