3.0 KiB
3.0 KiB
金丝雀发布又称为灰度发布。它能够缓慢的将修改推广到一小部分用户,验证没有问题后,再推广到全部用户,以降低生产环境引入新功能带来的风险。
主要实现思想是SVC 通过标签 将生产流量逐步转发到新版本的POD中,不断扩容新版本Deployment的副本数,缩减旧版本的副本数
工作负载概览
工作负载 | 名称 | 标签 | 标签选择器 | 作用 |
---|---|---|---|---|
service | web-service | 无 | app: nginx | |
env: prod | 负载均衡,通过筛选pod 的标签进行流量转发 | |||
deployment | web-nginx-v1(旧版本,使用nginx1.14镜像) | |||
web-nginx-v2(新版本,使用nginx1.20镜像) | 随意,为方便管理,这里我们与下面的pod 的标签保持一致 | app: nginx | ||
env: prod | ||||
release:v1(旧) | ||||
release:v2(新) | 扩展管理、管理pod等 | |||
pod | web-nginx | app: nginx | ||
env: prod | ||||
release:v1(旧) | ||||
release:v2(新) | 无 | 管理容器,最小调度单位 |
通过nginx 的版本进行验证,举个例子 svc 的Cluster IP为 1.1.1.1,那我们就通过curl 1.1.1.1/net 查看404 显示中的nginx版本,即可快速区分
YAML
以下为详细yaml配置文件
SVC
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: nginx
env: prod
ports:
- protocol: TCP
port: 80
targetPort: 80
旧Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-nginx-v1
labels:
app: nginx
env: prod
release: v1
spec:
replicas: 10
selector:
matchLabels:
app: nginx
env: prod
release: v1
template:
metadata:
labels:
app: nginx
env: prod
release: v1
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
新Deplyment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-nginx-v2
labels:
app: nginx
env: prod
release: v2
spec:
replicas: 1
selector:
matchLabels:
app: nginx
env: prod
release: v2
template:
metadata:
labels:
app: nginx
env: prod
release: v2
spec:
containers:
- name: nginx
image: nginx:1.20.1
ports:
- containerPort: 80
具体操作
运行svc 和deployment
kubectl apply -f canary-dp-old.yaml -f canary-svc.yaml
查看SVC的CLUSTER-IP
kubectl get svc
查看运行状态并测试服务可用性
kubectl get pod
curl SVC的CLUSTER-IP/net
开始金丝雀部署
kubectl apply -f canary-dp-new.yaml
查看运行状态,并测试金丝雀的服务情况
kubectl get pod
curl SVC的CLUSTER-IP/net
逐步扩容金丝雀的副本数量,减少v1版本的副本数量
kubectl scale deployment web-nginx-v2 --replicas 数量(建议逐步加大)
kubectl scale deployment web-nginx-v1 --replicas 数量(建议逐步减小)