K8S的金丝雀发布(Canary Release)

2023-11-04

1.概念

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

  • 总:会有一个对外暴露测试,没有问题再更新剩余的,更新一个对外开放一个

2.相关架构理念

在这里插入图片描述

3.金丝雀发布部署操作

(1)删除之前的pod

#删除之前的pod
kubectl delete deployments.apps nginx-deployment
kubectl get pod

在这里插入图片描述

(2)创建新的资源

kubectl create deployment nginx-wang --image=nginx:1.14 --port=80 --replicas=3
kubectl get pod

在这里插入图片描述

(3)查看详细信息

kubectl describe pod

在这里插入图片描述

(4)另开一个终端进行实时跟踪

kubectl get pod -w

在这里插入图片描述

(5)在原本的终端更新资源类型

kubectl  set image deployment nginx-wang nginx=nginx:1.15 && kubectl rollout pause deployment nginx-wang
kubectl get pod
kubectl get all

在这里插入图片描述

(6)监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w 

在这里插入图片描述

(7)查看详细地址

kubectl get pod -owide

在这里插入图片描述

(8)查看连接并查看版本

curl -I 10.244.1.14
curl -I 10.244.2.17

在这里插入图片描述

4.访问测试

(1)对端口进行外放访问设置

kubectl expose deployment nginx-wang --port=80 --target-port=80 --type=NodePort
#查看设置的内容
kubectl get svc

在这里插入图片描述

(2)浏览器访问测试

http://192.168.174.18:31659/

在这里插入图片描述

(3)查看详细信息

kubectl describe svc nginx-wang

在这里插入图片描述

(4)查看 Kubernetes 集群中的服务端点信息

kubectl get endpoints

在这里插入图片描述

(5)详细信息

kubectl describe endpoints nginx-wang

在这里插入图片描述

5.金丝雀隔离新的pod

  • 测试新的版本是否有问题,给pod做隔离,需要单独的标签

(1)创建新的pod并给端口

kubectl expose deployment nginx-wang --name=new-nginx-nginx-wang --port=80 --target-port=80 --type=NodePort
kubectl get svc
kubectl get endpoints

在这里插入图片描述

(2)编辑服务对象

kubectl edit svc new-nginx-nginx-wang
复制里面的文件内容编辑新的yaml文件
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2023-09-12T07:15:10Z"
  labels:
    app: nginx-wang
    pod-template-hash: 675f9f4c48
  name: new-nginx-nginx-wang
  namespace: default
  resourceVersion: "27300"
  uid: 668a7d78-41a5-42f4-bb0c-ea91c0f633f1
spec:
  clusterIP: 10.96.202.59
  clusterIPs:
  - 10.96.202.59
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30360
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-wang
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

(3)获取 Pod 的列表

kubectl get pod --show-labels
kubectl describe pod nginx-wang-675f9f4c48-2s65t 
#编辑yaml文件
vim new-nginx-nginx-wang.yaml
#粘贴并加以修改,做标签分离

在这里插入图片描述
在这里插入图片描述

(4)删除新的标签

kubectl delete svc new-nginx-nginx-wang
#取当前集群中所有服务对象的列表
kubectl get svc
#创建或更新服务对象
kubectl apply -f new-nginx-nginx-wang.yaml
#再次被执行,目的是获取已经更新后的服务对象列表
kubectl get svc

在这里插入图片描述

(5)访问测试

curl -I 10.96.202.59

在这里插入图片描述

6.重建

(1)复制旧的yaml配置文件,复制apiVersion: v1—————— type: NodePort

kubectl edit svc nginx-wang 
#查看标签,复制标签
kubectl get pod --show-labels

在这里插入图片描述

(2)编辑配置文件,将标签粘贴

vim nginx-wang.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2023-09-12T07:09:22Z"
  labels:
    app: nginx-wang
  name: nginx-wang
  namespace: default
  resourceVersion: "26785"
  uid: 7843e321-f4cf-4500-aad3-98238db50f7d
spec:
  clusterIP: 10.96.152.69
  clusterIPs:
  - 10.96.152.69
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31659
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    pod-template-hash: 6ff987bf55
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

(3)删除现有的

kubectl delete svc nginx-wang
#查看已删除的
kubectl get svc
#再次新创建
kubectl apply -f nginx-wang.yaml
#查看创建的
kubectl get svc

在这里插入图片描述

7.获取当前集群中所有的终结点

kubectl get endpoints

在这里插入图片描述

(1)获取当前集群中所有的 Pod 列表

kubectl get pod -owide
#登录新的pod测试
kubectl exec -it nginx-wang-675f9f4c48-2s65t bash

在这里插入图片描述

(2)测试访问

cd /usr/share/nginx/html/
echo "this is exo-update" > index.html
exit

(3)查看端口,并且浏览器访问

kubectl get svc
#此新的就是给测试更新玩家使用
http://192.168.174.19:30360/

在这里插入图片描述

8.登录旧的pod中测试

(1)登录旧1的pod中测试

kubectl get pod
kubectl exec -it nginx-wang-6ff987bf55-fql27 bash
echo "this is bkpp" >> index.html
exit

在这里插入图片描述

(2)登录旧2的pod中测试

kubectl get pod
kubectl exec -it nginx-wang-6ff987bf55-kdsq9 bash
cd /usr/share/nginx/html/
echo "this is lotto" > index.html
exit

在这里插入图片描述

(3)访问测试

kubectl get svc
#访问网页,等待刷新变化
http://192.168.174.19:31659/

在这里插入图片描述
在这里插入图片描述

9.查看更新状态信息

kubectl rollout status deployment nginx-wang
#确保更新的pod没问题了,继续更新
kubectl rollout resume deployment nginx-wang

(1)查看最后的更新情况

kubectl get pods -w 

(2)查看端口及地址

kubectl get svc
#访问测试
curl -I 192.168.174.19:30360
curl -I 10.96.202.59

在这里插入图片描述

总结:

金丝雀发布的声明式管理方法:
create/apply 两个的区别:
当yaml配置文件发送改动后,使用以下两个更新的过程:
create:是一次性的,先delete删除原有的资源再通过yaml’文件再创建。
nginx-wang

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8S的金丝雀发布(Canary Release) 的相关文章

随机推荐

  • 2020DCIC智慧海洋建设算法赛学习01-赛题北京及地理数据分析常用工具

    序 本系列的博客旨在学习2020DCIC智能算法赛 智慧海洋建设的优秀方案 对地理数据分析问题积累一些思路和经验 作为这一系列博客的开篇 这篇博客主要内容包括对赛题的解析和对项目中会用到的一些常用的地理数据分析工具的简要介绍 1 赛题背景
  • 想学C语言却不知道怎么如何下手?(最全c语言学习路径带你指明方向)

    C语言小白学习攻略 C语言入门 目标 就如同英语学习 需要学习单词 短语 长句 文章 最后口语练习 该阶段学习完成后 能够熟练掌握C常见关键字与数据类型 单词 掌握常见语法结构 短语 熟悉面向过程函数式编程 长句 达到能够读懂他人编写的C程
  • Unity Andriod调试

    一 查看手机运行日志 1 调试原理 https docs unity cn cn 2019 4 Manual LogFiles html 2 调试工具 Andriod LogCat 在Unity PackageManager中下载 3 调试
  • Matlab机器人工具箱机械手建模详解(同知乎)

    关于使用Matlab机器人工具箱建立机械手模型的一些经验分享给大家 使用软件版本为matlab2015a和rvctools9 8 matlab机械人工具箱下载地址 http petercorke com wordpress toolboxe
  • vue中的ref之间的通信

    vue文档对ref的官方解释是 ref 被用来给元素或子组件注册引用信息 引用信息将会注册在父组件的 refs 对象上 如果在普通的 DOM 元素上使用 引用指向的就是 DOM 元素 如果用在子组件上 引用就指向组件实例 p hello p
  • 从用户登录谈谈测试用例设计

    等价类划分和边界值分析方法是最常用 最典型并且是最重要的黑盒测试方法 一 功能测试用例 针对 用户登录 功能测试 基于等价类划分和边界值分析方法 能够设计的功能测试用例有 1 输入已注册的用户名和正确的密码 验证是否登录成功 2 输入已注册
  • 干货满满!MES生产制造管理全流程分析

    阅读本文您将了解 1 什么是MES生产管理流程 2 MES生产管理流程具体步骤 3 实施MES生产管理流程优势 4 MES生产管理流程中可能会遇见的问题 一 什么是MES生产管理流程 MES生产管理系统 又称制造执行系统 是一种集成了计划
  • C语言--库函数qsort排序

    文章目录 一 C语言 库函数qsort排序 1 1 冒泡排序 1 2 qsort排序 二 模拟实现qsort函数 一 C语言 库函数qsort排序 假设我们要对一个数组元素进行排序 如果是一个整型数组 我们首先可以想到的是冒泡排序 但其实C
  • 腾讯潘安群:腾讯云金融级数据库TDSQL分析

    SDCC 2015将于2015年11月19 21日在北京 朗丽姿西山花园酒店召开 在大会召开之际 笔者采访到了腾讯高级软件工程师潘安群 请他分享TDSQL在腾讯云金融领域的实践经验 SDCC 2015将于2015年11月19 21日在北京
  • python语法--文件基本操作(一)

    python语法 文件基本操作 文件基本操作 打开文件 open name mode encoding name 文件名 可以包括路径 mode 设置打开文件的模式 只读r 写入w 追加a等 encoding 编码格式 推荐utf 8 f
  • layui实现Tree组件前后端交互

    文章目录 前言 运行效果 Tree组件 1 Tree组件的加载方式 1 1选项卡 2 Tree组件的渲染格式 3 基础参数 4 数据源属性选项 后台代码实现 1 定义对应数据格式实体 2 数据转换 3 树结构存储的处理 角色处理 1 思路
  • Zookeeper巨坑的一个问题 & 启动不了zkServer-闪退等情况

    1 配置环境变量 不然无法启动服务 2 此时不应有 java jdk1 8 cmd报这种错误 第一检查java环境变量是否错误 是否包含空格 第二就是我这种情况 一定要注意打开服务需要64位目录下的java
  • C++ 结束进程

    有时候进程未正常退出 导致进程列表遗留僵尸进程 程序启动需要杀死这种僵尸进程 include TLHELP32 H void TerminateSelfApplication TCHAR szFileName MAX PATH 0 TCHA
  • jmeter接口应用3:jmeter后置处理器-正则表达式提取器

    今天将继续讲解jmeter中关于后置处理器中的用法 也叫提取器 详情参考 https www toutiao com article 7195493970682692154 正则表达式提取器 正则表达式提取器提取内容有两种 一种是提取字符串
  • div向右偏移设置 css让div靠右移一定距离

    转自 https www thinkcss com shili 1372 shtml div对象盒子向右偏移设置 使用css让div靠右一定距离 div向右移教程实例篇 div向右偏移一定距离 可采用margin外边距实现 也可以使用pad
  • shell脚本模块化

    shell脚本模块化 模块化的优点 功能清晰 易于维护 便于阅读 代码复用 源代码 只有单一的一个run sh文件 bin bash 功能 更新小程序并重新启动 设置程序出错时不再继续执行 set e 查找app的进程号并杀死该进程 ech
  • 网络端口号和协议号(大全)

    网络端口号 作用 端口号的主要作用是表示一台计算机中的特定进程所提供的服务 网络中的计算机是通过IP地址来代表其身份的 它只能表示某台特定的计算机 但是一台计算机上可以同时提供很多个服务 如数据库服务 FTP服务 web服务等 我们就通过端
  • python中哈希表和set的使用

    哈希表不能将可变对象作为key值 即引用类型的内容不能是可变的 这样不安全 因为hashcode函数是根据对象的内容计算出key和value的位置 如果引用的内容可变 那么每次查找的位置结果都不一样 之前存储的键值对就会找不到 不符合has
  • 区块链技术之分布式存储

    随着互联网技术应用技术的普遍使用 所有行业的数据量指数级增长 数据存储技术都需要更新 分布式存储是一种数据存储技术 它可以跨多个物理服务器传播文件 块存储或者对象存储 以实现高可用性 数据备份和灾难恢复目的 可扩展的存储服务以及数据中心的巨
  • K8S的金丝雀发布(Canary Release)

    金丝雀发布 Canary Release 1 概念 2 相关架构理念 3 金丝雀发布部署操作 4 访问测试 5 金丝雀隔离新的pod 6 重建 7 获取当前集群中所有的终结点 8 登录旧的pod中测试 9 查看更新状态信息 总结 1 概念