【K8S】Kubernetes 中滚动发布由浅入深实战

这篇具有很好参考价值的文章主要介绍了【K8S】Kubernetes 中滚动发布由浅入深实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Kubernetes中滚动发布的需求背景

1.1 滚动发布

  • Kubernetes及其强大的特点之一就是超大规模集群应用的自动化部署,这其中包括了应用的扩容、缩容及其自适应扩缩容(HPA、VPA)。
  • 在滚动发布的过程中,Kubernetes会对要进行升级的应用所属Pod进行逐个的替换,直至将所有的Pod都替换为新版本的Pod。整个过程中新老版本的Pod都处于在线、提供服务的状态。

1.2 滚动发布、蓝绿发布、金丝雀发布的区别

  • 蓝绿发布:蓝绿发布是存在2个系统,一个是正在提供服务的系统,标记为绿色,一个是准备发布的带有新功能的系统,标记为蓝色。蓝色系统用来做发布前的测试,测试过程中发现的任何问题都可以直接在蓝色系统上直接更改,不干扰用户正在使用的系统。蓝色系统经过充分、有效的测试、验证后,被证明可以安全上线后,会将所有的用户切到蓝色系统上。
    【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

  • 金丝雀发布(灰度发布):金丝雀发布是只有一个系统,对该系统中的应用实例进行逐步替换。例如系统中有100个服务实例,我们可以先替换掉其中的10个实例,然后系统给这10个实例切分流量,通过一段时间的线上流量的测试,如果发现这10个实例在功能及体验上没有任何问题,那我们继续扩大新实例的比例,并给新版本的实例切分更多的流量,直至全部实例替换完成。

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

  • 滚动发布:滚动发布只有一个系统,虽然也是逐个替换掉系统中的服务实例,但是新老实例会同时在系统中提供服务,不存在特意的流量切分。不过,在Kubernetes集群中,可以利用标签选择器实现金丝雀发布(灰度发布)的效果。

二、Kubernetes中实现滚动发布

2.1 定义Kubernetes中的版本

  • 我们常说的版本可能就是跟代码挂钩,就是代码或者配置发生变动就产生一个新的版本,Kubernetes中将在Yaml中对Pod的定义定义为一个版本,可参考文章Kubernetes 中 Pod 定义与操作实践快速了解Pod定义。
  • K8S中版本定义范围。我们在Pod模版中定义了Pod使用的镜像及其版本、镜像拉取策略、环境变量参数等。定义Pod的Yaml内容的变化都会产生一个新的版本。对Pod的定义不光是通过创建Pod资源对象直接创建,我们在Deployment 资源对象或者 DaemonSet 资源对象中的 template 字段中定义的Pod 的变化也会导致Pod的版本变化。
  • 版本号。Kubernetes中的版本号一般是对Deployment 资源对象或者 DaemonSet 资源对象中的 template 字段的定义部分进行哈希,计算哈希值,取哈希值作为版本号。

2.2 创建 Deployment 资源对象

2.2.1 在 Yaml 中定义 Deployment 资源对象

Yaml 内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ngx-dep
  name: ngx-dep
  
spec:
  minReadySeconds: 20
  replicas: 4
  selector:
    matchLabels:
      app: ngx-dep
      
  template:
    metadata:
      labels:
        app: ngx-dep
    spec:
      containers:
      - image: nginx:1.24-alpine
        name: nginx

2.2.2 执行命令创建 Deployment 资源对象

在终端窗口中执行命令kubectl apply -f ngx-dep-v1.yaml:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
使用kubectl get podkubectl get deploy 或者 kubectl describe deploy 命令查看创建出的资源对象的状态。

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

三、Kubernetes中滚动发布的管理

3.1 查看 Deployment 资源对象对应Pod在滚动发布中的状态

3.1.1 查看滚动发布状态

执行命令 kubectl rollout status deploy ngx-dep ,查看deploy资源名为ngx-dep 的状态:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
终端会不断输出当前滚动发布的进程状态,直接滚动发布完成,完成时该命令结束会输出deployment "xxxxxx" successfully rolled out 的字样。

3.1.2 查看滚动发布历史

执行命令 kubectl rollout history deploy ngx-dep ,查看 deploy资源名为ngx-dep 的滚动发布记录:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

查到滚动发布记录之后,我们可以通过--revision 参数来具体指定某个具体的版本,来查看该发布相对于上一个版本的变更,例如执行 kubectl rollout history deploy --revision=2:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

3.2 版本回退

3.2.1 回滚掉最新的滚动发布

使用 kubectl rollout undo deploy ngx-dep 回滚掉名为 ngx-dep 的 deploy 资源对象最新的滚动发布:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
我们使用kubectl rollout history 命令查看发布记录可以看到多出一个记录4,因为回滚也会产生一个新的发布记录。

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

3.2.2 回滚至指定版本

我们使用kubectl rollout history 命令先看下当前有哪些版本可用:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
我们使用kubectl rollout history deploy --revision 命令再看下版本3和版本5的内容:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

可以看到,这2个版本的差别仅在与所使用的Nginx 镜像的版本号不同,现在使用 kubectl rollout history 命令的--to-revision 选项回退到我们指定的版本3(1.24-alpine):

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生

可以看到提示回滚成功了。我们看下当前最新版本Pod的NGINX的版本号:

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生
确实是我们预期的1.24-alpine

3.3 增加版本说明

我们需要在Deployment 资源对象的metadata字段下添加annotations 字段,就可以为查询滚动发布记录的CHANGE-CAUSE 处添加对应说明了。此处对文件 ngx-dep-v3.yaml 进行更改如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: ngx-dep
  name: ngx-dep
  annotations:
  	kubernetes.io/change-cause: 升级Nginx的版本到1.27
  
spec:
  minReadySeconds: 20
  replicas: 4
  selector:
    matchLabels:
      app: ngx-dep
      
  template:
    metadata:
      labels:
        app: ngx-dep
    spec:
      containers:
      - image: nginx:1.27-alpine
        name: nginx

然后执行kubectl apply -f ngx-dep-v3.yaml 命令进行升级。然后我们使用kubectl rollout history 命令再来查看版本记录,可以看到我们记录的具体的变更原因了。

【K8S】Kubernetes 中滚动发布由浅入深实战,kubernetes,容器,云原生文章来源地址https://www.toymoban.com/news/detail-820735.html

到了这里,关于【K8S】Kubernetes 中滚动发布由浅入深实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【个人笔记】由浅入深分析 ClickHouse

    项目中不少地方使用到ClickHouse,就对它做了一个相对深入一点的了解和研究。并对各种知识点及整理过程中的一些理解心得进行了汇总并分享出来,希望对其他同学能有帮助。 本文主要讲解ClickHouse的特点、读写过程、存储形式、索引、引擎、物化视图等特性。 适合 入门和

    2024年01月20日
    浏览(34)
  • React - redux 使用(由浅入深)

    中文文档: http://www.redux.org.cn/ 英文文档: https://redux.js.org/ Github: https://github.com/reactjs/redux 可直接参照 目录十 进行使用 react-redux redux 是一个专门用于做状态管理的JS库(不是react插件库)。 它可以用在 react, angular, vue 等项目中, 但基本与 react 配合使用。 作用: 集中式管理 re

    2024年02月07日
    浏览(38)
  • 由浅入深理解C#中的事件

    本文较长,给大家提供了目录,可以直接看自己感兴趣的部分。 前面介绍了C#中的委托,事件的很多部分都与委托类似。实际上,事件就像是专门用于某种特殊用途的简单委托,事件包含了一个私有的委托,如下图所示: 有关事件的私有委托需要了解的重要事项如下: 1、事

    2024年02月03日
    浏览(33)
  • Springboot3+EasyExcel由浅入深

    环境介绍 技术栈 springboot3+easyexcel 软件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。 官网https://easyexcel.opensource.ali

    2024年01月16日
    浏览(37)
  • 【由浅入深学习MySQL】之索引进阶

    本系列为:MySQL数据库详解,为千锋资深教学老师独家创作 致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~ 文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流! 从今天开始本系列

    2024年02月05日
    浏览(32)
  • 手拉手Vue组件由浅入深

    组件 (Component) 是 Vue.js 最强大的功能之一,它是html、css、js等的一个聚合体,封装性和隔离性非常强。 组件化开发:     1、将一个具备完整功能的项目的一部分分割多处使用     2、加快项目的进度     3、可以进行项目的复用 组件注册分为:全局注册和局部注册 目录

    2024年01月18日
    浏览(34)
  • 由浅入深介绍 Python Websocket 编程

    1.1 websocket 协议简介 Websocket协议是对http的改进,可以实现client 与 server之间的双向通信; websocket连接一旦建立就始终保持,直到client或server 中断连接,弥补了http无法保持长连接的不足,方便了客户端应用与服务器之间实时通信。 适用场景 html页面实时更新, 客户端的html页面

    2024年02月03日
    浏览(34)
  • 由浅入深剖析 Apollo(阿波罗)架构

    目录 一、介绍 二、架构和模块 三、架构剖析 1.最简架构  2. 高可用保障  3.多接口扩展 四、总结 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的

    2024年02月13日
    浏览(28)
  • 由浅入深了解机器学习和GPT原理

    我不是一个机器学习专家,本来是一名软件工程师,与人工智能的互动很少。我一直渴望深入了解机器学习,但一直没有找到适合自己的入门方式。这就是为什么,当谷歌在2015年11月开源TensorFlow时,我非常兴奋,知道是时候开始学习之旅了。不想过于夸张,但对我来说,这就

    2024年02月09日
    浏览(23)
  • 【由浅入深学MySQL】- MySQL连接查询

    本系列为:MySQL数据库详解,为千锋教育资深Java教学老师独家创作 致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【点个关注】持续追更~ 文末有重点总结和福利内容! 技术类问题,也欢迎大家和我们沟通交流!

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包