k8s 进阶实战笔记 | 应用的蓝绿、金丝雀发布笔记

文章目录

  • 应用的蓝绿、金丝雀发布笔记
    • 应用升级策略
    • 停机升级
    • 滚动更新
    • 蓝绿发布
    • 金丝雀发布

应用的蓝绿、金丝雀发布笔记

应用升级策略

  • Deployment.spec.strategy 设置

  • Recreate:同时删除所有副本,停机升级策略

    • 不存在新老版本共存

    • 存在某个时间段服务不可用

    • 副本集一起Terminating,一起Pending,一起ContainerCreating,一起Running

  • RollingUpdate:默认滚动升级,不停机升级策略

    • 不存在某个时间段服务不可用
    • 切换过程,新老版本会共存
    • 滚动更新核心参数
      • maxUnavailable:滚动升级时允许的最大unavailable的pod数量,可以是整数或者百分比(默认25%),这个值越小,越能保证服务稳定,更新越平滑;
      • maxSurge:滚动升级时先启动的pod数量,可以是整数或者百分比(默认25%),这个值调的越大,副本更新速度越快;

停机升级

示例

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx-v1ports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 3strategy:type: Recreate  ## 需要显式指明停机升级策略,因为默认是滚动升级template:metadata:labels:app: nginx-v1spec:containers:- name: nginx-v1image: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

在这里插入图片描述

接下来我们修改一下镜像版本,进行停机更新升级

image: docker.m.daocloud.io/nginx

在这里插入图片描述

滚动更新

默认就是滚动更新策略

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx-v1ports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 3
#  strategy:
#    type: Recreate  ## 需要显式指明停机升级策略,因为默认是滚动升级template:metadata:labels:app: nginx-v1spec:containers:- name: nginx-v1image: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

在这里插入图片描述

  • 可以通过更改以下字段,来变更每次被嘎的数量和启动新的版本的数量
strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%	###最大被嘎的数量,越小,更新越平滑maxSurge: 25%		### 启动新的pod数量,越大,副本更新越快
  • 滚动更新:会有新旧版本同时存在的问题

蓝绿发布

发布原理

  • svc的selector选择器
  • v1版本和v2版本同时启动,然后通过修改svc一键切换
  • 无缝升级,无缝回退,不存在两个版本共存的现象
  • 生产环境推荐,只不过会增加资源开销

v1版本

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginx-v1replicas: 3template:metadata:labels:app: nginx-v1spec:containers:- name: nginx-v1image: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

v2版本

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v2namespace: defaultlabels:app: nginx-v2
spec:selector:matchLabels:app: nginx-v2replicas: 3template:metadata:labels:app: nginx-v2spec:containers:- name: nginx-v2image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

svc

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx-v1ports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort

当前访问情况

在这里插入图片描述

修改svc的selector信息为v2然后观察

spec:selector:app: nginx-v2
while true;do curl -sI 192.168.1.225:30179 | grep -E 'Server|HTTP';done

在这里插入图片描述

金丝雀发布

金丝雀发布就是先发一个新版应用,但是是一个小比例范围,也叫灰度测试,如结果灰度测试通过,就把其余的v1版本全部替换程v2版本。如果测试没通过,就直接回退

  • 新功能验证,适当的引流,适合金丝雀发布

v1

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v1namespace: defaultlabels:app: nginx-v1
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: docker.m.daocloud.io/nginx:1.23.1imagePullPolicy: IfNotPresent

v2

---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-v2namespace: defaultlabels:app: nginx-v2
spec:selector:matchLabels:app: nginxreplicas: 1template:metadata:labels:app: nginxspec:containers:- name: nginximage: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

svc

---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30179type: NodePort

在这里插入图片描述

灰度测试成功,我们逐渐将流量切入过去即可

### 修改副本数即可

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Unity中使用Ultraleap的Slider组件

Unity中使用Ultraleap的Slider组件,实现物体在指定范围内滑动: 本节在上一节基础上进行,上一小结参考如下: Unity中使用Ultraleap的InteractionButton组件 本节工程文件如下: Unity中使用Ultraleap的Slider组件 1、在…

如何隐藏Selenium特征实现自动化网页采集

Selenium是一个流行的自动化网页测试工具,可以通过模拟用户在Chrome浏览器中的操作来完成网站的测试。然而,有些网站会检测浏览器是否由Selenium驱动,如果是,就会返回错误的结果或拒绝访问。为了避免这种情况,我们需要…

网络安全防御保护 Day4

要点一:防火墙的智能选路 就近选路: 在访问不同运营商的服务器时直接通过对应运营商的链路,以此来提高通信效率,避免绕路。 策略路由(PBR): 这是一种基于用户定义的策略(如业务需求、…

【MATLAB源码-第128期】基于matlab的雷达系统回波信号仿真,输出脉压,MTI,MTD等图像。

操作环境: MATLAB 2022a 1、算法描述 ​雷达(Radio Detection and Ranging)是一种使用无线电波来探测和定位物体的系统。它的基本原理是发射无线电波,然后接收这些波从目标物体上反射回来的信号。通过分析这些反射波&#xff0…

STM32的分类和选型

F系列(主要用于普通应用) STM32F0xx:低成本、低功耗,适用于成本敏感和低功耗的应用。STM32F1xx:中低端微控制器,具有丰富的外设和良好的性能。STM32F2xx:高性能微控制器,适用于要求…

二维数组的学习

前言 在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。 二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式: 数据类型 数…

【英语趣味游戏】填字谜(Crossword)第2天

谜题出处 柯林斯字谜大全(6),Collins——Big Book of Crosswords (Book 6) Puzzle Number: 115 本期单词 横向 1、Fetch (8) 拿,取,8个字母 答案:Retrieve,取到,拿回 5、Common s…

C/C++笔记-使用mysql-connector-c连接mysql数据库

驱动在这个地方下载: MySQL :: Download MySQL Connector/C (Archived Versions) 我下载的是:mysql-connector-c-6.1.11-winx64 解压后lib有2个,一个是libmysql.lib一个是mysqlclient.lib 他们的区别如下: libmysql.lib 和 m…

elementui中的tree自定义图标

需求&#xff1a;实现如下样式的树形列表 自定义树的图标以及点击时&#xff0c;可以根据子级的关闭&#xff0c;切换图标 <el-tree :data"treeList" :props"defaultProps"><template #default"{ node, data }"><span class&quo…

【C/C++ 02】希尔排序

希尔排序虽然是直接插入排序的升级版本&#xff0c;和插入排序有着相同的特性&#xff0c;即原始数组有序度越高则算法的时间复杂度越低&#xff08;预排序机制&#xff09;&#xff0c;但是是不稳定排序算法。 为了降低算法的时间复杂度&#xff0c;所以我们需要在排序之前尽…

ARCGIS PRO SDK 数据库属性域设置与获取

一、数据库创建属性域。 sdk3.1 以下的开发版本不支持&#xff0c;不能使用 Pro SDK 向域添加新的编码值&#xff0c;可以使用地理处理工具&#xff1a; 创建属性域 Dim va As IReadOnlyList(Of String) Dim gpResult As ArcGIS.Desktop.Core.Geoprocessing.IGPResult Dim env…

【EEG信号处理】ERP相关

ERP&#xff0c;全称为event-related potential&#xff0c;中文是事件相关电位。 首先要明确的一点是&#xff0c;ERP是根据脑电图EEG得到的&#xff0c;他是EEG的一部分&#xff0c;是最常用的时域分析方法 可能有一部分是介绍不到的&#xff0c;望谅解 在维基百科中给的定义…

力扣题集(第一弹)

一日练,一日功;一日不练十日空。 学编程离不开刷题&#xff0c;接下来让我们来看几个力扣上的题目。 1. 242. 有效的字母异位词 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数…

【数据结构与算法】之哈希表系列-20240129

这里写目录标题 一、217. 存在重复元素二、219. 存在重复元素 II三、242. 有效的字母异位词四、268. 丢失的数字五、290. 单词规律六、349. 两个数组的交集七、350. 两个数组的交集 II 一、217. 存在重复元素 简单 给你一个整数数组 nums 。如果任一值在数组中出现至少两次 &a…

VS+QT 配置Eigen库

1、下载Eigen库&#xff0c;如下&#xff1a; 2、解压到项目目录下&#xff0c;如下&#xff1a; 3、 在C/C中包含文件&#xff0c;如下&#xff1a; 4、在头文件中加入如下代码&#xff1a; 5、测试代码&#xff1a; //.cpp文件 #include "testEigen.h"testEigen::…

Linux下安装edge

edge具有及其强大的功能&#xff0c;受到很多人的喜爱&#xff0c;它也开发Linux版本&#xff0c;下面是安装方法&#xff1a; 1.去edge官网下载Linux(.deb)文件。 https://www.microsoft.com/zh-cn/edge/download?formMA13FJ 2.下载之后输入以下指令&#xff08;后面是安装…

Blender 与 3ds Max | 面对面的直接较量(2024)

Blender和3ds Max&#xff0c;哪个动画软件更好&#xff1f;作为一个从事动画领域十年的专业人士&#xff0c;Mark McPherson提供了八条最新建议&#xff0c;帮助你了解哪个软件更适合满足你的3D动画需求。 1.建模 获胜者&#xff1a;3ds Max。3ds Max的建模机制已经被证明是…

软件架构设计

一、考点分布 软件架构的概念&#xff08;※※※&#xff09;基于架构的软件开发&#xff08;※※※※&#xff09;软件架构风格&#xff08;※※※※※&#xff09;特定领域软件架构&#xff08;※※※&#xff09;软件质量属性&#xff08;※※※※※&#xff09;软件架构评估…

第一节 分布式架构设计理论与Zookeeper环境搭建

1. 分布式架构设计理论 学习Zookeeper之前,我们需要掌握一些分布式系统基础知识&#xff1a;了解分布式系统的概念、原理。 配置管理 域名服务 分布式同步 发布订阅 1. 分布式架构介绍 1.1 什么是分布式 《分布式系统原理和范型》一书中是这样定义分布式系统的&#xff1a…

【ArcGIS微课1000例】0099:土地利用变化分析

本实验讲述在ArcGIS软件中基于两期土地利用数据,做土地利用变化分析。 文章目录 一、实验描述二、实验过程三、注意事项一、实验描述 对城市土地利用情况进行分析时,需要考虑不同时期土地利用图层在空间上的差异性,如农用地转建筑用地的空间变化。而该变化过程表现为各时期…