首页 > 其他分享 >前端灰度环境wayne+k8s部署

前端灰度环境wayne+k8s部署

时间:2022-11-08 14:13:33浏览次数:37  
标签:ingress kubernetes canary nginx wayne 灰度 io k8s

前端灰度环境wayne+k8s部署

一、灰度发布canay背景

  灰度发布是一种发布方式,也叫金丝雀发布,起源是矿工在下井之前会先放一只金丝雀到井里,如果金丝雀不叫了,就代表瓦斯浓度高。原因是金丝雀对瓦斯气体很敏感。灰度发布的做法是:会在现存旧应用的基础上,启动一个新版应用,但是新版应用并不会直接让用户访问。而是先让测试同学去进行测试。如果没有问题,则可以将真正的用户流量慢慢导入到新版,在这中间,持续对新版本运行状态做观察,直到慢慢切换过去,这就是所谓的A/B测试。当然,你也可以招募一些灰度用户,给他们设置独有的灰度标示(Cookie,Header),来让他们可以访问到新版应用,当然,如果中间切换出现问题,也应该将流量迅速地切换到老应用上。

三种方式:header标示访问、cookie标示访问、权重分流访问;k8s 会优先去匹配 header ,如果未匹配则去匹配 cookie ,最后是 weight。

二、基于header切分流量

基于 Header 切分流量,这种实现原理主要根据用户请求中的 header 是否存在灰度标示 header去判断是否为灰度用户,再决定是否返回灰度版本服务。

修改下上面的ingress-gray.yml文件即可:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: user-canary
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/canary: "true"
+    nginx.ingress.kubernetes.io/canary-by-header: "name"
+    nginx.ingress.kubernetes.io/canary-by-header-value: "vip"
spec:
  rules:
  - http:
      paths: 
       - backend:
          serviceName: service-user-v2
          servicePort: 80
  backend:
     serviceName: service-user-v2
     servicePort: 80

 

三、根据cookie切分流量

基于 Cookie 切分流量。这种实现原理主要根据用户请求中的 Cookie 是否存在灰度标示 Cookie去判断是否为灰度用户,再决定是否返回灰度版本服务

nginx.ingress.kubernetes.io/canary

可选值为 true / false 。代表是否开启灰度功能

nginx.ingress.kubernetes.io/canary-by-cookie

:灰度发布 cookie 的 key。当 key 值等于 always 时,灰度触发生效。等于其他值时,则不会走灰度环境 ingress-gray.yaml

我们创建一个ingress-gray.yaml文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: user-canary
annotations:
  kubernetes.io/ingress.class: nginx
  nginx.ingress.kubernetes.io/rewrite-target: /
  nginx.ingress.kubernetes.io/canary: "true"
  nginx.ingress.kubernetes.io/canary-by-cookie: "vip_user"
spec:
rules:
- http:
    paths: 
     - backend:
        serviceName: service-user-v2
        servicePort: 80
backend:
   serviceName: service-user-v2
   servicePort: 80

四、基于权重切分流量

这种实现原理主要是根据用户请求,通过根据灰度百分比决定是否转发到灰度服务环境中

nginx.ingress.kubernetes.io/canary-weight

 :值是字符串,为 0-100 的数字,代表灰度环境命中概率。如果值为 0,则表示不会走灰度。值越大命中概率越大。当值 = 100 时,代表全走灰度。

一样一样的,修改下配置参数罢了:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: user-canary
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/canary: "true"
+   nginx.ingress.kubernetes.io/canary-weight: "50"
spec:
  rules:
  - http:
      paths: 
       - backend:
          serviceName: service-user-v2
          servicePort: 80
  backend:
     serviceName: service-user-v2
     servicePort: 80

 五、根据cookie标示ingress-canary: always显示不同的页面;

正常用户:

灰度用户::在cookie写入ingress-canary: always

六、canary灰度配置

6.1、新建git(灰度)分支

分支名称master-canary(v1.0.0)

6.2、wayne创建灰度部署

6.3、wayne创建灰度部署内容

注:容器名称和镜像地址有canary标示区分;

6.4、wayne创建负载均衡

常见负载均衡(带canary标示区分)

填写负载均衡内容,并发布;

6.5、wayne配置灰度ingress

创建ingress

填写ingress配置

配置灰度cookie设置

"annotations": {
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/canary": "true",
      "nginx.ingress.kubernetes.io/canary-by-cookie": "ingress-canary"
    }

七、灰度结束平滑发布

重要!重要!重要!

7.1、负载均衡名称对调,新的换老的老的换新的;(注:新的老的都要更换)

7.2、下一次更新灰度;

新建新的灰度分支:master-canary(v1.0.1)

7.3、更改本地代码的发布配置yml文件(略)->重启当前部署

 

 

标签:ingress,kubernetes,canary,nginx,wayne,灰度,io,k8s
From: https://www.cnblogs.com/PeterWolf/p/16869480.html

相关文章

  • Kubernetes(K8S) 镜像拉取策略 imagePullPolicy
    镜像仓库,镜像已更新,版本没更新,K8S拉取后,还是早的服务,原因:imagePullPolicy镜像拉取策略默认为本地有了就不拉取,需要修改[root@k8smaster~]#kubectleditdeployment/......
  • 在线k8s练习环境,Killercoda和play-with-k8s
    最近发现了两款比较好的在线kubernetes操练环境,killercoda和play-with-k8s。尽管手头上已经有了ECS、虚拟机,不过这两款在线环境胜在方便快捷。让我们体验下吧!https://kill......
  • k8s 使用非root用户启动
      k8s使用非root用户启动DockerfileFROM192.168.15.198/source/tomcat8_jdk1.8:202107131202MAINTAINERfengjian<[email protected]>RUNgroupadd-g2......
  • K8S-Calico 网络插件
    Calico是一个三层的虚拟网络解决方案,它把每个节点都当作虚拟路由器(vRouter),并把每个节点上的Pod都当作是“节点路由器”后的一个终端设备并为其分配一个IP地址。各节点......
  • 【k8s连载系列】k8s介绍
    k8s是Kubernetes的缩写,Google于2014年开源了Kubernetes项目。一、k8s的历史演变k8s的演变过程:首先从传统的服务-->虚拟机部署-->容器部署-->k8s。k8s的由来,归根......
  • 【云原生】Apache Livy on k8s 讲解与实战操作
    目录一、概述二、开始编排部署1)部署包准备1)构建镜像2)创建livychart模板3)修改yaml编排4)开始部署5)测试验证6)卸载一、概述Livy是一个提供Rest接口和spark集群交互的服务。......
  • 搭建一个小巧完备的K8S环境(chrono《kubernetes入门实战课》笔记整理)
     【概念说明】kubernetes,因为k和s之间,有8个字母,所以通常又称为K8S。用来对容器进行调度和管理的,即用来对容器进行编排的。如果只有简单的几个镜像,确实不需要k8s,但是如果......
  • K8s 有损发布问题探究
    作者:魁予问题提出流量有损是在应用发布时的常见问题,其现象通常会反馈到流量监控上,如下图所示,发布过程中服务RT突然升高,造成部分业务响应变慢,给用户的最直观体验就是卡顿;或......
  • K8s 有损发布问题探究
    作者:魁予问题提出流量有损是在应用发布时的常见问题,其现象通常会反馈到流量监控上,如下图所示,发布过程中服务RT突然升高,造成部分业务响应变慢,给用户的最直观体验就是卡......
  • 基于k8s的发布系统的实现
    综述首先,本篇文章所介绍的内容,已经有完整的实现,可以参考这里。在微服务、DevOps和云平台流行的当下,使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前......