1、准备需要部署的deployment配置 demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: workload-demo
namespace: default
spec:
replicas: 10
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: busybox
image: busybox:1.28.3
command: ["/bin/sh", "-c", "sleep 100d"]
env:
- name: VERSION
value: "version-1"
部署 kubectl apply -f demo.yaml
2、创建rollout配置文件,rollout.yaml
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
name: rollouts-demo
namespace: default
annotations:
rollouts.kruise.io/rolling-style: partition # 使用多批次更新策略,只能配置 "partition" or "canary"
# "partition" 意味着像 CloneSet 一样分批滚动,不会创建任何额外的 Workload
# “canary” 表示以金丝雀方式滚动,并将创建一个金丝雀工作负载,对于Deployment默认是canary
spec:
objectRef: # 定义工作负载
workloadRef: # 关联需要管理的工作负载
apiVersion: apps/v1
kind: Deployment
name: workload-demo
strategy: # 定义升级策略
canary: # 使用 Canary 策略
steps: # 定义多批次更新策略
- replicas: 1
- replicas: 50%
- replicas: 100%
kubectl apply -f rollout.yaml
3、开始升级
kubectl patch deployment workload-demo -p \
'{"spec":{"template":{"spec":{"containers":[{"name":"busybox", "env":[{"name":"VERSION", "value":"version-2"}]}]}}}}'
查看pod状态
继续更新
kubectl-kruise rollout approve rollout/rollouts-demo -n default
继续更新
kubectl-kruise rollout approve rollout/rollouts-demo -n default
灰度发布完毕