此文为学习《Kubernetes权威指南》的相关笔记
学习笔记:
对于大规模集群而言,如何在进行服务升级的同时保持可用性一直是一个难点。
作为Pod副本管理控制器,Deployment可以配置Pod发布和更新方式,保证在Pod升级过程中不存在Pod不可用的问题。
如果Pod是在Deployment上创建的,只需要在运行时修改Deployment的Pod定义或者镜像名称,并应用到Deployment镜像上,控制器就能够完成Deployment的自动更新操作,Deployment可指定的Pod更新策略有两种:
- Recreate:设置spec.strategy.type=Recreate,该策略下将杀掉正在运行的Pod,然后创建新的。
- RollingUpdate:设置spec.strategy.type=RollingUpdate,滚动更新,即逐渐减少旧Pod的同时逐渐增加新Pod。
其中默认的RollingUpdate滚动更新策略的“边删除边更新”保证了在更新期间的服务可用性,在使用这个策略时,有两个可定义参数:
- spec.strategy.RollingUpdate.maxUnavailable:更新过程中Pod数量可以低于Pod期望副本的数量或百分比(默认25%)
- spec.strategy.RollingUpdate.maxSurge:更新过程中Pod数量可以超过Pod期望副本的数量或百分比(默认25%)
接下来分别尝试使用两种更新策略
一、使用RollingUpdate更新策略
1、定义并创建nginx-deployment
在配置 nginx-deployment文件中,指定nginx容器版本为1.7.9,副本数为3
在不指定spec.strategy.type时,默认更新策略即为RollingUpdate
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
创建Deployment并查看部署情况
nginx-deployment配置生成了一个RS和下属的3个Pod副本
# kubectl create -f update-deployment-test.yaml
deployment.apps/nginx-deployment created# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-7cccdd79bf 3 3