蓝绿原理:创建新旧两套deployment和service,通过ingress层面直接进行权重分流,验证无误后将流量完全导向新服务
ingress上的配置如下:
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/service-weight: | cnyunwei-svc:100,cnyunwei-new:50 name: cnyunwei.cc-ingress namespace: qa spec: rules: - host: www.cnyunwei.cc http: paths: - backend: serviceName: cnyunwei-svc servicePort: 8002 path: / - backend: serviceName: cnyunwei-new servicePort: 8002 path: /
这里只是实现了ingress层面分流,实际应用中需要结合CI/CD 实现自动化。
灰度发布
灰度发布的原理是类似的,灰度不过是需要长期保留两个版本,且灰度发布需要请求方配合,一般是需要在请求的header增加参数或者cookie 上定义,ingress匹配到响应参数分流到新的服务上。
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: gray-release annotations: # 请求头中满足正则匹配foo=bar的请求才会被路由到新版本服务cnyunwei-new中 nginx.ingress.kubernetes.io/service-match: | cnyunwei-new: header("foo", /^bar$/) namespace: qa spec: rules: - host: www.cnyunwei.cc http: paths: #老版本 - backend: serviceName: cnyunwei-svc servicePort: 8002 path: / #新版本 - backend: serviceName: cnyunwei-new servicePort: 8002 path: /