k8s灰度/金丝雀发布

2024-09-07 05:28

本文主要是介绍k8s灰度/金丝雀发布,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        灰度及蓝绿发布是为新版本服务创建一个与老版本服务完全一致的生产环境,在不影老版本服务的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版本。

        灰度发布的方式通常用于AB测试,是指一部分用户继续使用老版本的服务,将一部分用户的流量切换到新版本,如果新版本运行稳定,则逐步将所有用户迁移到新版本。

        金丝雀发布是指在生产环境中逐步推出新版本应用程序,只在一小部分用户或流量中使用该版本,并根据反馈逐步扩大规模,最终完全替换旧版本。金丝雀发布允许快速检测新版本与旧版本之间是否存在兼容性问题、性能问题或其他问题,并减轻了在实施全新发布时可能遭受的损失。

        蓝绿部署,是指同时运行两个版本的应用。在蓝绿部署时,蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。

例如发布前,在蓝色的系统上进行测试,测试完成后切换为蓝色系统,同时观察蓝色系统的运行状态,如果运行出现问题可以及时切回绿色系统。

蓝绿部署的优点

这样做可以减少发布影响的时间。例如某网站要进行后端升级,无需完全停掉服务更新,且出现问题后可以及时切回老版本。

蓝绿部署的缺点

需要两倍的硬件资源,需要额外进行付费;微服务架构很难这样进行迁移;要求蓝绿两套系统完全没有耦合;迁移后未完成的任务进行迁移需要一定的成本,如数据库的迁移。

        假设我们有两个命名空间,一个是正在使用的生产环境Production,另一个是用于灰度测试的Canary。在发布应用时,可以将应用先发布至Canary,然后切—部分流量到Canary,之后慢慢将流量全部切换到上面即可。

1.创建V1版本

(1)首先创建模拟生产(Production)环境的命名空间和服务
[root@k8s-master ~]# kubectl create ns production
(2)创建v1版本的应用
[root@k8s-master ~]# kubectl create deployment canary-v1 \--image=registry.cn-beijing.aliyuncs.com/dotbalo/canary:v1 \
-n production
(3)创建Service暴露应用
[root@k8s-master ~]# kubectl expose deployment canary-v1 --port 8080 -n production
(4)创建ingress,指定域名为canary.com
[root@k8s-master ~]# cat v1-ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: canary-v1namespace: production
spec:ingressClassName: nginxrules:- host: canary.comhttp:paths:- backend:service:name: canary-v1port:number: 8080path: /pathType: ImplementationSpecific

备注:

路径类型pathType

  • ImplementationSpecific:系统默认,有IngressClass控制器提供具体实现
  • exact:精确匹配URL路径,区分大小写
  • prefix:匹配URL路径的前缀
(5)部署ingress
[root@k8s-master ~]# kubectl create -f v1-ingress.yaml
(6)测试访问

在客户端添加canary.com的域名解析

2.创建v2版本

创建V2版本,充当灰度环境。

(1)创建v2版本的命名空间
[root@k8s-master ~]# kubectl create ns canary
(2)创建v2版本的应用
[root@k8s-master ~]# kubectl create deployment canary-v2 \--image=registry.cn-beijing.aliyuncs.com/dotbalo/canary:v2 \
-n canary
(3)创建v2版本的service
[root@k8s-master ~]# kubectl expose deployment canary-v2 --port 8080 -n canary
[root@master ~]# ku get svc -n canary
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
canary-v2   ClusterIP   10.104.202.121   <none>        8080/TCP   31m
[root@k8s-master ~]# curl 10.104.202.121:8080
<h1>Canary v2</h1>

3.通过ingress控制流量

[root@k8s-master ~]# vim canary-v2.yamlapiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:nginx.ingress.kubernetes.io/canary: "true"	##指定此为灰度环境nginx.ingress.kubernetes.io/canary-weight: "10"	##灰度环境的权重name: canary-v2		##此ingress的名称namespace: canary	##所属的命名空间
spec:ingressClassName: nginxrules:- host: canary.com	##客户端访问的域名http:paths:- backend:		##后端设置,通常用来设置serviceservice:name: canary-v2port:number: 8080path: /pathType: ImplementationSpecific
[root@k8s-master ~]# kubectl create -f canary-v2.yaml 

备注:

nginx.ingress.kubernetes.io/canary: "true"  表示此站点为灰度模式

nginx.ingress.kubernetes.io/canary-weight: "10"表示为该站点分配10%的流量,原站点就可以得到90%的流量

weight: "10"  权重值为10

4.测试灰度发布

(1)进行测试
[root@k8s-master ~]# for i in $(seq 10);do curl -s canary.com;done
<h1>Canary v2</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>

从结果可以大致判断出,两个网站的访问比例大约为1:9

(2)修改权重为50的测试结果
[root@k8s-master ~]# ku edit ingress canary-v2 -n canary
#修改权重值为50
nginx.ingress.kubernetes.io/canary-weight: "50"
[root@k8s-master ~]# for i in $(seq 10);do curl -s canary.com;done
<h1>Canary v2</h1>
<h1>Canary v2</h1>
<h1>Canary v1</h1>
<h1>Canary v2</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>
<h1>Canary v2</h1>
<h1>Canary v2</h1>
<h1>Canary v1</h1>
<h1>Canary v1</h1>

这篇关于k8s灰度/金丝雀发布的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144185

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令

maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository。如果采用原始直接打包放到lib目录的方式进行处理,便对项目的管理带来一些不必要的麻烦。例如版本升级后需要重新打包并,替换原有jar包等等一些额外的工作量和麻烦。为了避免这些不必要的麻烦,通常我们

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4

用Cri-O,Sealos CLI,Kubeadm方式部署K8s高可用集群

3.6 Cri-O方式部署K8s集群 注意:基于Kubernetes基础环境 3.6.1 所有节点安装配置cri-o [root@k8s-all ~]# VERSION=1.28[root@k8s-all ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensu