金丝雀发布(灰度发布)介绍 及 声明式管理方法简介

目录

一   应用发布策略

1,滚动发布(k8s默认)

2,蓝绿发布

3,金丝雀发布

二    金丝雀发布(Canary Release) (灰度发布)

1,金丝雀发布图解

2, 金丝雀发布部署过程

2,1  准备命名空间和 pod

2.2 更新deployment的版本,并配置暂停deployment

2.3 pod隔离 

2.31 将旧版本nginx  与 之前的svc 绑定

2.32 将新版本nginx  与 新的svc 绑定

2.4 测试pod 隔离是否成功

2.5  恢复更新,查看更新状态

2.6  查看更新完成最后状态

三   声明式管理方法

1, 基本介绍

2, 命令介绍


一   应用发布策略

1,滚动发布(k8s默认)

(一个一个去更新)

2,蓝绿发布

一套业务,两个版本

维护两个相同的生产环境(蓝环境和绿环境)。新版本首先部署到非活跃环境(比如蓝环境),完成部署并验证无误后,通过切换路由或负载均衡器配置,将流量从旧环境(绿环境)无缝转移到新环境。

3,金丝雀发布

逐步将新版本部署到一部分用户或服务器上,监控性能和错误率。如果一切正常,逐渐扩大新版本的覆盖范围,直至完全替换旧版本。

二    金丝雀发布(Canary Release) (灰度发布)

1,金丝雀发布图解

如图,某服务当前版本为 v1,现在新版本 v2 要上线。为确保流量在服务升级过程中平稳无损,采用金丝雀发布方案,逐步将流量从老版本迁移至新版本。

2, 金丝雀发布部署过程

2,1  准备命名空间和 pod
kubectl create ns wyq
# 创建nskubectl create deployment nginx01   --image=nginx:1.14  --port=80  --replicas=4   -n wyq
#  用deployment 控制器创建4个podkubectl expose deployment nginx01  --port=80 --target-port=80 --name=nginx01 --type=NodePort   -n wyq
# 对外暴露

查看 准备环境

他们都是由 同一个叫nginx01   的deployment 控制器创造出来的。

所以标签都是一样的

2.2 更新deployment的版本,并配置暂停deployment
kubectl set image deployment nginx01 nginx=nginx:1.20.1 -n wyq && kubectl rollout pause deployment nginx01 -n wyq

更新deployment的版本
kubectl set image 
#用于更新 Kubernetes 资源(如 Deployment、StatefulSet 等)中的容器镜像。
deployment nginx01
#指定要更新的 Deployment 的名称为 nginx01
nginx=nginx:1.20.2  
#指定要更新的容器名称为 nginx,并将其镜像设置为 nginx:1.20.2。
-n wyq
#指定命名空间为 wyq
 
 暂停更新
kubectl rollout pause deployment nginx01 -n wyq
#这个命令用于暂停wyq 命名空间中的 nginx01 Deployment 的滚动更新。
 
kubectl rollout pause
#用于暂停 Kubernetes Deployment 的滚动更新。
deployment nginx01
#指定要暂停滚动的 Deployment 的名称为 nginx01
-n wyq
#指定命名空间为 wyq

查看此时的状态

可以看到pod 由4个变成了6个  由于新生成的pod 不是原来deployment 产生的,所以标签不一致

可以看到流量会分配到 新旧版本的nginx 上

2.3 pod隔离 

流量控制:为了实现金丝雀发布,需要控制流量,使得只有一小部分用户或流量能够访问到新版本的应用程序。

使用Service的selector和labels来选择性地路由流量到不同的Deployment。可以创建一个新的Service,其selector只匹配新版本的Pods,然后将一小部分流量路由到这个Service。

说白了就是 创建一个新的svc 暴露端口,并将新版本的nginx和 新的svc绑定,将老版本的nginx和 老的svc绑定 。 这样就能做到 pod 隔离,相当于把旧版的Pod与新版本的Pod实例进行了分割,而后再通过关注新版本的性能和稳定性,来确保新版本能够正常运行。在确定新版本的pod实例能够正常使用,且没有漏洞时,再恢复更新

2.31 将旧版本nginx  与 之前的svc 绑定

删除原来的svc ,用yaml 文件生成新的svc (nginx01)   绑定旧版本的nginx

apiVersion: v1
kind: Service
metadata:namespace: wyqlabels:app: nginx01name: nginx01
spec:ports:- port: 80protocol: TCPtargetPort: 80nodePort: 32428selector:pod-template-hash: 695cdcd7c8type: NodePort

指定nodePort: 32428      (注意这个端口要和之前的一样!方便客户访问

重点:

selector: #键值对标签选择器,用于确定哪些Pod应该被包含在Service的后端集合中

pod-template-hash: "695cdcd7c8" #这里填 旧版本nginx 的标签

 执行yaml 文件   生成svc

2.32 将新版本nginx  与 新的svc 绑定

用yaml 文件生成新的svc (nginx02)   绑定新版本的nginx

apiVersion: v1
kind: Service
metadata:namespace: wyqlabels:app: nginx01name: nginx02
spec:ports:- port: 80protocol: TCPtargetPort: 80nodePort: 31244selector:pod-template-hash: 6fc9f9b648type: NodePort

 执行yaml 文件   生成svc (nginx02) 绑定新版本nginx

查看现在的环境

完成上述操作,相当于把旧版的Pod与新版本的Pod实例进行了分割,而后再通过关注新版本的性能和稳定性,来确保新版本能够正常运行。在确定新版本的pod实例能够正常使用,且没有漏洞时,再恢复更新

2.4 测试pod 隔离是否成功

访问旧版本的32428 端口   流向只会去向旧版本

访问旧版本的31244 端口   流向只会去向新版本

2.5  恢复更新,查看更新状态

恢复更新

kubectl rollout resume deployment nginx01 -n wyq

查看更新状态

kubectl rollout status deployment nginx01 -n wyq

2.6  查看更新完成最后状态

更新完毕

所有流向都会走向新的 svc

旧的service最好不要删除,当新版本出现问题,需要回滚时,旧版的pod还是会关联在旧的service当中

3,   常见错误注意事项

此方法是错误的! 这只是加标签,像商品上贴备注一样,做不到 将pod 隔离

三   声明式管理方法

1, 基本介绍

1.适合于对资源的修改操作
2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理
资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
4.语法格式:kubectl create/apply/delete -f xxxx.yaml

2, 命令介绍

查看资源配置清单

kubectl get deployment nginx -o yaml

解释资源配置清单

kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata

修改资源配置清单并应用  

离线修改:
修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

在线修改

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改

 删除资源配置清单

陈述式删除:
kubectl delete service nginx
声明式删除:
kubectl delete -f nginx-svc.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库操作(函数)

函数是一段可以直接被另外一段程序调用的程序或代码 一。字符串函数 1.concat(s1,s1....sn):字符串拼接,将s1,s2,sn拼接为一个字符串 例如: select concat("hello","world"); 2.lower(str&…

登录验证登录次数失败过多进行设置延时

现象结果示例截图 swagger示例效果 控制台示例效果 后端代码示例 package com.java.javamethod.service.impl;import com.java.javamethod.dao.UserMapper; import com.java.javamethod.domain.Result; import com.java.javamethod.domain.User; import lombok.extern.slf4j.…

《绝地潜兵2》开发商目标成为下一个暴雪或FS社

《绝地潜兵2》的开发商Arrowhead正以惊人的表现在游戏界崭露头角。这款游戏在发售后迅速获得了巨大成功,使得Arrowhead的首席创意官Johan Pilestedt怀揣雄心壮志,他们的目标是在保持独立的同时,成为下一个暴雪或From Software。 Johan Pilest…

firewalld

一、Firewalld概述 Firewalld 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具 支持IPV4、IPV6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种配置模式 运行时配置 永久配置 二、Firewalld和iptables的关系 netfilter 位于L…

10个最佳Android数据恢复工具,用于恢复已删除的文件

由于我们现在在智能手机上存储了许多重要文件,因此了解数据恢复工具变得很重要。您永远不会知道何时需要使用适用于Android的数据恢复工具。 由于不乏Windows数据恢复工具,因此从崩溃的计算机中恢复文件很容易。但是,当涉及到从Android恢复数…

兆原数通基于Apache SeaTunnel的探索实践

随着大数据技术的不断发展,数据同步工具在企业中的应用变得愈发重要。为了满足复杂多样的业务需求,找到一款高效、灵活的数据同步工具变得尤为关键。 在这篇文章中,我们将分享兆原数通研发经理李洪军对Apache SeaTunnel的选择、应用及经验。这…

jinkens打包前端依赖下载失败怎么办

不知道有没有小伙伴遇见这种问题,项目在本地可以正常下载、运行打包,但在jinkens上就不行了,配置了几种镜像也还是不行,这要如何解决呢? 那就只能去到jinkens配置的工作空间那里,找到对应的项目 &#xff…

总结优秀的prompt案例,学习更有效的prompt提示词工程写法,值得收藏

Prompt 提示词工程大多数人都在用,而且都会用,但是不一定写的好?很多人都在想怎么写好,更能满足自己的业务需求,或者实际场景。 我最近工作中也写了很多的prompt,像zero-shot、few-shot、COT这些都尝试过、…

FSC认证是什么?森林认证的好处是什么?

FSC认证(Forest Stewardship Council,森林管理委员会认证)是一种运用市场机制来促进森林可持续经营,实现生态、社会和经济目标的工具。以下是关于FSC认证的详细介绍: 一、FSC认证包括两个方面: 森林经营认…

乡村振兴与农业现代化:以现代农业科技为引领,提升农业综合生产能力,打造高产高效、生态安全的美丽乡村

目录 一、引言 二、现代农业科技在乡村振兴中的作用 (一)提高农业生产效率 (二)促进农业产业升级 (三)改善农村生态环境 三、提升农业综合生产能力的途径 (一)加强农业科技研…

Diffusion Policy:基于扩散模型的机器人动作生成策略

项目地址: Diffusion Policy (columbia.edu) 一、摘要 本文介绍了 "扩散策略",这是一种生成机器人行为的新方法,它将机器人的视觉运动策略(visuomotor policy)表示为条件去噪扩散过程(conditi…

添加、修改和删除列表元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 添加、修改和删除列表元素也称为更新列表。在实际开发时,经常需要对列表进行更新。下面我们介绍如何实现列表元素的添加、修改和删除。 …

如何使用Matlab进行三角剖分(自定义函数实现delaunayTriangulation 使用Bowyer-Watson 算法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Delaunay三角形 二、使用步骤 1.Bowyer-Watson算法 2.算法步骤 三、动画演示 四、核心代码 五、对比matlab自带函数和我们的算法: 总结 前…

谷歌开源项目BERT源码解读与应用实例

数据及代码见文末 基于BERT的中文情感分析实战:基于BERT的中文情感分析实战-CSDN博客 基于BERT的中文命名实体识别识别实战:基于BERT的中文命名实体识别识别实战-CSDN博客 1.项目配置文件 GLUE/BERT_BASE_DIR是项目的预训练权重,预训练权重主要包含3个部分:参数配置文件…

打气球小游戏

1.气球往上飘 我们声明两个符号常量来作为窗体的长和宽,接着就是常规操作 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600#include<easyx.h> #include<stdio.h> int main() {initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();get…

python+selenium - UI自动框架之封装浏览器引擎driver方法

在做兼容性测试的适合&#xff0c;可以运行指定的浏览器&#xff08;IE,Chrome,Edge&#xff09; 目录文件&#xff1a; from selenium import webdriver from urllib3.exceptions import ProtocolError from common.log import *def getDriver():# if browserType is None:br…

模拟面试题

1.装箱和拆箱是指什么&#xff1f; 装箱——把栈中内容迁移到堆中去&#xff08;值转引用&#xff09; 拆箱——把堆中内容迁移到栈中去&#xff08;引用转值&#xff09; 2.值和引用类型在变量赋值时的区别是什么&#xff1f; 值类型&#xff1a;赋值时复制数据本身&a…

Gitee在已有项目基础上创建仓库中遇到的问题和解决

问题一&#xff1a;fatal: remote origin already exists 解释&#xff1a;当前仓库添加了一个名为"origin"的远程仓库配置&#xff0c;此时输入 git remote add origin https://xxx就会提示上面的内容。 解决方案1:移除旧的origin git remote remove origin 解决方案…

C++——mapset红黑树

目录 一补充知识 1关联式容器 2键值对 二set 1set的介绍 2set的使用 三map 1map的说明 2map的使用 四容器在oj中的使用 五AVL树 1概念 2插入 3AVL的旋转 3.1右单旋 3.2左单旋 3.3左右双旋 3.4右左双旋 4判断AVL树是否平衡 完整源代码 六红黑树 1概念 2性…

紫光展锐突破创新终端品类,搭载展锐芯的全球首款二合一5G云电脑正式发布

近日&#xff0c;搭载紫光展锐5G芯片T760的中兴云电脑逍遥系列正式发布&#xff0c;亮点&#xff1a; 全球首款二合一5G云电脑&#xff0c;支持本地/云端双模式&#xff0c;一键切换&#xff0c;用户可同时享有Android平板和Windows云电脑两种形态&#xff1b;支持5G蜂窝网络&…