K8S之实现业务的金丝雀发布

news/2024/6/3 18:33:28 标签: kubernetes, 容器, 云原生

如何实现金丝雀发布

  • 金丝雀发布简介
  • 优缺点
  • 在k8s中实现金丝雀发布

金丝雀发布简介

金丝雀发布的由来:17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感。空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;当瓦斯含量超过一定限度时,虽然人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为瓦斯检测指标,以便在危险状况下紧急撤离。
金丝雀发布(又称灰度发布、灰度更新):一般先发1台,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试 (国内常称灰度测试)。

简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。 如果金丝测试通过,则把剩余的V1版本全部升级为V2版本。如果金丝雀测试失败,则直接回退金丝雀,发布失败。
在这里插入图片描述

优缺点

优点:灵活,策略自定义,可以按照流量或具体的内容进行灰度(比如不同账号,不同参数),出现问题不会影响全网用户
缺点:没有覆盖到所有的用户导致出现问题不好排查

在k8s中实现金丝雀发布

实践描述:
一个服务部署6个pod,更新了部分pod里服务的版本:用的新的代码做的镜像,通过测试再更新剩余的。

1、创建资源

vim  myapp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  namespace: canary
spec:
  replicas: 6
  selector:
   matchLabels:
    app: myapp
  template:
   metadata:
    labels:
     app: myapp
   spec:
    containers:
    - name: myapp-container
      image: janakiramm/myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
      - containerPort: 80

在终端1更新服务并监测更新过程

kubectl apply -f myapp.yaml
kubectl get pods -l app=myapp -n canary -w

在这里插入图片描述

2、开始升级一个服务
打开另一个终端2执行如下操作:

kubectl set image deployment myapp myapp-container=janakiramm/myapp:v2  -n canary && kubectl rollout pause deployment myapp -n canary

在这里插入图片描述

回到终端1观察,显示如下:
在这里插入图片描述

注:上面的解释说明把myapp-container这个容器的镜像更新到janakiramm/myapp:v2版本 ,更新镜像之后,创建3个新的pod就立即暂停;
如果暂停几个小时之后没有问题,那么取消暂停,就会依次执行后面步骤,把所有pod都升级。

3、解除暂停,升级剩余服务

打开终端2执行如下

kubectl rollout resume deployment myapp -n canary

回到终端1继续观察
在这里插入图片描述

在终端1可以看到执行后是把余下的pod里的容器都更的版本
在这里插入图片描述

kubectl get rs -n canary

可以看到replicaset控制器有2个了
在这里插入图片描述


http://www.niftyadmin.cn/n/5413751.html

相关文章

如何查看前端的vue项目是vue2还是vue3项目

1. 检查package.json文件 在项目的根目录下,打开package.json文件,查找dependencies或devDependencies部分中的vue条目。版本号将告诉你是Vue 2还是Vue 3。例如: Vue 2.x: "vue": "^2.x.x"Vue 3.x: "vue": &…

Maven终端命令生成Spring-boot项目并输出“helloworld“

1. 生成项目 mvn archetype:generate填写groupId和artifactId&#xff0c;其余默认即可 2. 修改pom.xml文件 将如下内容放入pom.xml文件内 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artif…

ios xcode 15 PrivacyInfo.xcprivacy 隐私清单

1.需要升级mac os系统到13 兼容 xcode 15.1 2.升级mac os系统到14 兼容 xcode 15.3 3.选择 New File 4.直接搜索 privacy 能看到有个App Privacy 5.右击Add Row 7.直接选 Label Types 8.选中继续添加就能添加你的隐私清单了 苹果官网文档Describing data use in privacy man…

Qt/C++音视频开发68-检查是否含有B帧/转码推流/拉流显示/监控拉流推流/海康大华宇视监控

一、前言 为什么需要判断视频文件是否含有B帧&#xff0c;这个在推流的时候很容易遇到这个问题&#xff0c;一般来说&#xff0c;没有B帧的视频文件&#xff0c;解码后的数据帧pts和dts都是顺序递增的&#xff0c;而有B帧的则未必&#xff0c;可能有些需要先解码后面显示&…

生活的色彩--爱摸鱼的美工(17)

题记 生活不如意事十之八九&#xff0c; 恶人成佛只需放下屠刀&#xff0c;善人想要成佛却要经理九九八十一难。而且历经磨难成佛的几率也很小&#xff0c;因为名额有限。 天地不仁以万物为刍狗&#xff01; 小美工记录生活&#xff0c;记录绘画演变过程的一天。 厨房 食…

混合云构建-VPN打通阿里云和AWS云

混合云构建是指将本地数据中心(或私有云)与公有云服务(如阿里云和AWS)结合起来,以便数据和应用程序可以在两者之间灵活移动。这种架构可以提高企业的灵活性和扩展性,同时还可以根据需要保持对某些关键数据和应用程序的控制。 在阿里云和AWS之间建立Site to Site VPN是实…

阿里云和腾讯云区别价格表,云服务器费用对比2024年最新

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

【C++】学习记录

一、第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello World!";return 0; } 二、数据类型、变量与常量、运算符 2.1 数据类型 2.2 变量与常量 2.3 运算符 三 、判断语句&#xff08;if-else、switch-case&#xff09; …