前言
主要聊一聊k8s 主要升级策略和版本控制,使用
Deployment控制器
升级
设置记录版本
nginx-rep.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
revisionHistoryLimit: 4
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
升级策略
可在 Deployment.spec.strategy 中设置
升级策略有两种
- Recreate:立刻升级,终端所有服务,升级期间服务不可用,适合停机升级
- RollingUpdate:滚动升级,可以设置升级策略,升级期间服务可用
Recreate
...
spec:
replicas: 3
revisionHistoryLimit: 4
strategy:
type: Recreate
selector:
matchLabels:
app: nginx
template:
...
- 测试
kubectl apply -f nginx-rep.yaml
# 查看,全部服务立刻升级
kubectl get pod
RollingUpdate
...
spec:
replicas: 3
revisionHistoryLimit: 4
strategy:
type: rollingUpdate
maxSurge: 10 #最大增量
maxUnavailable:2 #最大不可用
selector:
matchLabels:
app: nginx
template:
...
- 测试
kubectl apply -f nginx-rep.yaml
# 查看,全部服务立刻升级
kubectl get pod
版本不叠加更新
升级服务过程中,可能要经过多个中间过程,但是不想在中间过程产生新的版本记录,升级完成后只生成一个版本记录。
#暂停记录版本
kubectl rollout pause deployment.v1.apps/nginx-deployment
#中间多次操作...
#看看历史版本,没有变化
kubectl rollout history deployment.v1.apps/nginx-deployment
#让多次累计生效
kubectl rollout resume deployment.v1.apps/nginx-deployment
# 查看
kubect get pod
最后执行后看到本版进行了升级,生成版本记录