当前位置:首页 > 科技  > 软件

如何使用Higress快速实现金丝雀与蓝绿发布

来源: 责编: 时间:2023-10-08 10:00:09 404观看
导读背景现如今,越来越多的应用采用了微服务架构,这也导致了应用数量相比传统模式更多,管理更加复杂,发布更加频繁,如果直接将新版本上线发布给全部用户。一旦遇到线上事故(或BUG),对用户的影响极大,解决问题周期较长,甚至有时不得

背景

现如今,越来越多的应用采用了微服务架构,这也导致了应用数量相比传统模式更多,管理更加复杂,发布更加频繁,如果直接将新版本上线发布给全部用户。一旦遇到线上事故(或BUG),对用户的影响极大,解决问题周期较长,甚至有时不得不回滚到前一版本,严重影响了用户体验。为了保证整体系统的稳定,风险降到最低,我们可以采用灰度发布与蓝绿发布等不同的发布方式。EjO28资讯网——每日最新资讯28at.com

什么是金丝雀发布

金丝雀发布,又称灰度发布,是指通过让小部份用户流量引入的新版本进行测试,如果一切顺利,则可以增加(可能逐渐增加)百分比,逐步替换旧版本。如在过程中出现任何问题,则可以中止并快速回滚到旧版本。最简单的方式是随机选择百分比请求到金丝雀版本,但在更复杂的方案下,则可以基于请求的内容、特定范围的用户或其他属性等。EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

什么是蓝绿发布

蓝绿发布,提供了一种零宕机的部署方式,是一种以可观测的方式发布应用的方式,目的减少发布过程中停止时间。在保留老版本的同时部署新版本,将两个版本同时在线,新版本和老版本相互热备,通过切换路由权重的方式(非0即100)实现应用的不同版本上线或者下线,如果有问题可以快速地回滚到老版本。这样做的好处是无需停机,并且风险较小。EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

Higress 部署

# 环境为Kubernetes v1.27.3$ kubectl get nodesNAME                 STATUS   ROLES           AGE   VERSIONkind-control-plane   Ready    control-plane   9h    v1.27.3# 通过Helm安装$ helm repo add higress.io https://higress.io/helm-charts"higress.io" already exists with the same configuration, skipping$ helm install higress -n higress-system higress.io/higress --create-namespace --render-subchart-notes --set global.local=true --set higress-console.o11y.enabled=false  --set higress-console.domain=console.higress.io --set higress-console.admin.password.value=adminNAME: higressLAST DEPLOYED: Thu Aug 10 20:37:40 2023NAMESPACE: higress-systemSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:Higress successfully installed!To learn more about the release, try:  $ helm status higress -n higress-system  $ helm get all higress -n higress-system1. Use the following URL to access the console:  http://console.higress.io/  Since Higress Console is running in local mode, you may need to add the following line into your hosts file before accessing the console:  127.0.0.1 console.higress.io2. Use following commands to get the credential and login:  export ADMIN_USERNAME=$(kubectl get secret --namespace higress-system higress-console -o jsnotallow="{.data.adminUsername}" | base64 -d)  export ADMIN_PASSWORD=$(kubectl get secret --namespace higress-system higress-console -o jsnotallow="{.data.adminPassword}" | base64 -d)  echo -e "Username: ${ADMIN_USERNAME}/nPassword: ${ADMIN_PASSWORD}"  NOTE: If this is an upgrade release, your current password won't be changed.3. If you'd like to change the credential, you can edit this secret with new values: higress-system/higress-console# 查看密码$ export ADMIN_USERNAME=$(kubectl get secret --namespace higress-system higress-console -o jsnotallow="{.data.adminUsername}" | base64 -d)$ export ADMIN_PASSWORD=$(kubectl get secret --namespace higress-system higress-console -o jsnotallow="{.data.adminPassword}" | base64 -d)$ echo -e "Username: ${ADMIN_USERNAME}/nPassword: ${ADMIN_PASSWORD}"Username: adminPassword: admin# 配置Hosts $ cat /etc/hosts 127.0.0.1 demo.kubesre.com console.higress.io# 转发一下端口本地可以访问$ kubectl  port-forward service/higress-gateway -n higress-system 80:80

访问地址:http://console.higress.io/pluginEjO28资讯网——每日最新资讯28at.com

Username: admin Password: adminEjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

示例应用部署

部署示例版本:EjO28资讯网——每日最新资讯28at.com

$ cat demo.ymlapiVersion: apps/v1kind: Deploymentmetadata:  name: demo  labels:    app: demospec:  replicas: 1  selector:    matchLabels:      app: demo  template:    metadata:      labels:        app: demo    spec:      containers:      - name: demo        imagePullPolicy: Always        image: registry.cn-shanghai.aliyuncs.com/kubesre01/demo:v1        ports:        - containerPort: 8080---apiVersion: v1kind: Servicemetadata:  name: demo-svcspec:  type: ClusterIP  selector:    app: demo  ports:    - port: 8080      targetPort: 8080$ kubectl apply -f demo.ymldeployment.apps/demo created

配置Higress路由规则

在域名管理中创建域名:EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

在路由配置中创建路由:EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

验证访问

# 通过如下命令进行访问,出现如下内容则说明部署成功!$ curl http://demo.kubesre.com/info{"message":"云原生运维圈!"}

部署新版本示例

部署新版本:EjO28资讯网——每日最新资讯28at.com

$ cat demo_new.ymlapiVersion: apps/v1kind: Deploymentmetadata:  name: demo-new  labels:    app: demo-newspec:  replicas: 1  selector:    matchLabels:      app: demo-new  template:    metadata:      labels:        app: demo-new    spec:      containers:      - name: demo-new        imagePullPolicy: Always        image: registry.cn-shanghai.aliyuncs.com/kubesre01/demo:v2        ports:        - containerPort: 8080---apiVersion: v1kind: Servicemetadata:  name: demo-new-svcspec:  type: ClusterIP  selector:    app: demo-new  ports:    - port: 8080      targetPort: 8080$ kubectl apply -f demo_new.ymldeployment.apps/demo_new created

基于客户端请求头的流量切分

假设线上已运行了一套对外提供的七层demo应用,此时开发了一些新的功能,需要上线新版本demo应用,但是又不想直接替换成新版本demo应用,而是希望将请求头包含user=kubesre的客户端请求转发到新版本demo应用中,进行验证测试新版本demo应用,等测试验证通过并稳定后,可将所有流量从老版本demo应用切换到新版本demo应用中,再平滑地将老版本demo应用下线。EjO28资讯网——每日最新资讯28at.com

创建新版本Higress路由规则:EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

目标服务,选择最新版本EjO28资讯网——每日最新资讯28at.com

测试验证:EjO28资讯网——每日最新资讯28at.com

# 请求头为user: kubesre,访问到新的版本$ curl -H "user: kubesre" http://demo.kubesre.com/info{"message":"云原生运维圈!新版本"}# 其他则访问到老的版本$ curl  http://demo.kubesre.com/info{"message":"云原生运维圈!"}

基于客户端来源IP的流量切分

假设线上已运行了一套对外提供的七层demo应用,此时开发了一些新的功能,需要上线新版本demo应用,又不想直接替换成新版本demo应用,而是只希望公司内部人员能访问到新版本demo应用中,进行测试验证新版本demo应用,非公司内部人员访问还是访问到老版本应用中。等公司内部人员测试验证通过并稳定后,可将所有流量从老版本demo应用切换到新版本demo应用中,再平滑地将老版本demo应用下线。创建新版本Higress路由规则:EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

测试验证:EjO28资讯网——每日最新资讯28at.com

# 通过请求头模拟来源IP,真实环境不需要$ curl -H "X-Forwarded-For:123.456.789.123" http://demo.kubesre.com/info{"message":"云原生运维圈!新版本"}# 其他则访问到老的版本$ curl  http://demo.kubesre.com/info{"message":"云原生运维圈!"}

基于服务权重的流量切分

假设线上已运行了一套对外提供的七层demo应用,此时修复了一些问题,需要上线新版本demo应用,又不想直接替换成新版本demo应用,而是希望将20%的流量切换新版本。待运行一段时间稳定后,可将所有流量从老版本demo应用切换到新版本demo应用中,再平滑地将老版本demo应用下线。EjO28资讯网——每日最新资讯28at.com

创建新版本Higress路由规则:EjO28资讯网——每日最新资讯28at.com

选择最新目标服务即可,其他不需要任何特殊配置:EjO28资讯网——每日最新资讯28at.com

图片图片EjO28资讯网——每日最新资讯28at.com

配置权重:EjO28资讯网——每日最新资讯28at.com

$ kubectl edit ingress -n higress-system demo-new-canary# Please edit the object below. Lines beginning with a '#' will be ignored,# and an empty file will abort the edit. If an error occurs while saving this file will be# reopened with the relevant failures.#apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  annotations:    higress.io/canary: "true"   # 开启灰度    higress.io/canary-weight: "30" # 权重设置为30    higress.io/destination: demo-new-svc.default.svc.cluster.local:8080    higress.io/ignore-path-case: "false"  creationTimestamp: "2023-10-07T07:04:40Z"  generation: 1  labels:    higress.io/domain_demo.kubesre.com: "true"    higress.io/resource-definer: higress  name: demo-new-canary  namespace: higress-system  resourceVersion: "221188"  uid: bf833256-6993-4e56-bc3e-f96fe606e278spec:  ingressClassName: higress  rules:  ....

验证测试:EjO28资讯网——每日最新资讯28at.com

$ for i in {1..20}; do curl http://demo.kubesre.com/info; done;{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!新版本"}{"message":"云原生运维圈!新版本"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!新版本"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!"}{"message":"云原生运维圈!新版本"}{"message":"云原生运维圈!新版本"}{"message":"云原生运维圈!新版本"}{"message":"云原生运维圈!"}

注解说明

  • higress.io/canary-weight:设置请求到指定服务的百分比(值为0~100的整数)
  • higress.io/canary-weight-totatl:设置权重总和,默认为100
  • higress.io/canary-by-header:基于Request Header的名称进行流量切分。当请求包含该Header并其值为always时,请求流量会被分配到灰度服务入口;其他情况时,请求流量不会分配到灰度服务。

总结

本文介绍了金丝雀与蓝绿发布及不同的应用场景,并基于Higress结合企业实战案例进行演示,让大家更容易理解上手,接下来的文章会讲解Higress更多企业级应用实战,请敬请期待!EjO28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12451-0.html如何使用Higress快速实现金丝雀与蓝绿发布

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: SQL中的各种连接的区别总结

下一篇: 架构备战之计算机原理 flynn分类法

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 荣耀Magicbook V 14 2021曙光蓝版本正式开售,拥有触摸屏

    荣耀 Magicbook V 14 2021 曙光蓝版本正式开售,搭载 i7-11390H 处理器与 MX450 显卡,配备 16GB 内存与 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 键盘键程、
Top