金丝雀发布(又称灰度发布、灰度更新):
金丝雀发布一般是先发1台机器,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试,国内常称灰度测试。以前旷工下矿前,会先放一只金丝雀进去用于探测洞里是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。如果金丝测试通过,则把剩余的 V1 版本全部升级为 V2 版本。如果金丝雀测试失败,则直接回退金丝雀,发布失败。
k8s部署金丝雀发布文件先参考(k8s蓝绿部署)
demo-green2hd.yaml文件参考
apiVersion: apps/v1 kind: Deployment metadata: name: demo-green2hd namespace: default labels: app: demo version: v1 spec: replicas: 1 revisionHistoryLimit: 3 strategy: rollingUpdate: maxSurge: 30% maxUnavailable: 30% selector: matchLabels: app: demo version: v1 template: metadata: labels: app: demo version: v1 spec: containers: - name: demo-green2hd image: opcache/devops-go-sample:hello2 livenessProbe: httpGet: path: / port: 8080 scheme: HTTP initialDelaySeconds: 3 timeoutSeconds: 5 periodSeconds: 30 successThreshold: 1 failureThreshold: 5 readinessProbe: httpGet: path: / port: 8080 scheme: HTTP initialDelaySeconds: 3 timeoutSeconds: 5 periodSeconds: 10 successThreshold: 1 failureThreshold: 5 ports: - name: http containerPort: 8080 protocol: TCP
验证
#执行demo-green2hd.yaml kubectl apply -f demo-green2hd.yaml #获取SVC IP kubectl get rc,pods,svc,ingress --all-namespaces -o wide | grep demo
for i in `seq 1 100000`; do curl 10.106.49.228:8080/?a=$i ;echo " "; done