云原生-渐进式交付-纵享丝滑-金丝雀-AB Testing
前置说明
上篇把开发的 Spring Boot 应用发布到 Kubernetes, 而原生的 K8S Deployment 属于滚动更新,
本篇采用 渐进式交付,分批精细化控制流量更新。
Kruise Rollout
Kruise Rollout 支持配合流量和实例灰度的金丝雀发布、蓝绿发布、A/B Testing 发布。
官网
- https://github.com/openkruise/rollouts/blob/master/docs/tutorials/basic_usage.md
- https://openkruise.io/rollouts/user-manuals/basic-usage/
kruise-rollout 安装
helm repo add openkruise https://openkruise.github.io/charts
helm install kruise-rollout openkruise/kruise-rollout `
--set image.repository=openkruise-registry.cn-shanghai.cr.aliyuncs.com/openkruise/kruise-rollout `
--version 0.3.0
kubectl-kruise 安装
Windows 环境下载,添加扩展名 .exe 并添加到环境变量
https://github.com/openkruise/kruise-tools/releases/download/v1.0.5/kubectl-kruise-windows-amd64.tar.gz
Demo 展示
注意
更新的资源(Deployment/Service/Ingress)必须在同个命名空间内。
获取资源名称:
kubectl get deploy,svc,ingress
Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-app-svc
annotations:
kubernetes.io/ingress.class: higress
spec:
rules:
- host: test.lab.com
http:
paths:
- backend:
service:
name: demo-app-svc
port:
number: 8888
path: /test/hello
pathType: Exact
hosts
- C:\Windows\System32\drivers\etc\hosts
127.0.0.1 test.lab.com
金丝雀
金丝雀发布的思想是将少量的请求引流到新版本上,因此部署新版本服务只需极小数的机器。
验证新版本符合预期后,逐步调整流量权重比例,使得流量慢慢从老版本迁移至新版本,期间可以根据设置的流量比例,
对新版本服务进行扩容,同时对老版本服务进行缩容,使得底层资源得到最大化利用。
rollout-canary.yaml
apiVersion: rollouts.kruise.io/v1alpha1
kind: Rollout
metadata:
name: rollouts-canary-demo-app
namespace: default
annotations