k8s基础4——deployment控制器、应用部署、升级、回滚、水平扩容缩容

news2024/11/13 15:56:33

文章目录

  • 一、基本介绍
  • 二、应用程序生命周期
    • 2.1 部署应用
    • 2.2 应用升级
      • 2.2.1 修改YAML文件升级(交互式)
      • 2.2.2 命令指定镜像版本升级(免交互式)
      • 2.2.3 调用vim升级
    • 2.3 滚动升级
      • 2.3.1 升级流程
    • 2.4 应用回滚
      • 2.4.1 查看历史发布版本
      • 2.4.2 回滚到上一个版本
      • 2.4.3 回滚到指定版本
      • 2.4.4 验证升级时会访问到新、老两个版本
    • 2.5 水平扩缩容

一、基本介绍

基本了解:

  • Deployment是最常用的K8s工作负载控制器(Workload Controllers),实际项目部署调试中必用资源之一,所以必须要熟练掌握deploy资源的使用。
  • 它是K8s的一个抽象概念,用于更高级层次对象,部署和管理Pod。
  • 其他控制器还有DaemonSet、StatefulSet等,不同控制器针对不同的需求服务,比如网页服务、微服务、集群服务、监控服务等,在不同的场景使用可以达到不同的效果。

主要功能:

  • 管理Pod和ReplicaSet
  • 具有上线部署、副本设定、滚动升级、回滚等功能。
  • 应用场景:网站、API、微服务。

deploy在项目中的使用情况:

  1. 项目的大概流程是,项目立项—>开发团队开发程序——>测试人员进行业务测试——>运维人员部署项目服务——>运维现场调试升级服务或服务回滚——>功能调试完毕,项目闭环
  2. 在整个流程中,deploy资源都会被高频率的使用到,所以我们需要掌握它的核心功能使用,如何部署应用?如何升级应用?又如何回滚版本?

二、应用程序生命周期

  • 这里使用nginx服务来模拟在项目中如何对应用进行部署、升级和回滚。
  • 模拟步骤:
    1. 先部署一个1.16版本的nginx服务。
    2. 将1.16版本升级到1.17版本,模拟升级。
    3. 将1.17版本回滚到1.16版本,模拟回滚。

2.1 部署应用

1.编写yaml文件。

[root@k8s-master bck]# cat web666.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wen666
  namespace: test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: wen666
  template:
    metadata:
      labels:
        app: wen666
    spec:
      containers:
      - name: web
        image: nginx:1.16
---
apiVersion: v1
kind: Service
metadata:
  name: wen666
  namespace: test
spec:
  selector:
    app: wen666
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

2.导入yaml文件。

[root@k8s-master bck]# kubectl apply -f web666.yaml

3.查看暴露端口访问网页,此时的nginx版本是1.16。

在这里插入图片描述

在这里插入图片描述

2.2 应用升级

3种镜像升级方式:

  1. 修改yaml文件里镜像版本,再命令导入yaml即可升级,kubectl apply -f xxx.yaml
  2. 直接命令行指定镜像版本免交互式升级,kubectl set image deployment 【deployment名称】【容器名称】=nginx:1.17
  3. 使用系统编辑器打开,kubectl edit deployment deployment名称】

2.2.1 修改YAML文件升级(交互式)

1.修改yaml文件镜像版本为1.17
在这里插入图片描述
2.再次执行apply,导入yaml文件

[root@k8s-master bck]# kubectl apply -f web666.yaml 

3.访问网页查看nginx版本为1.17版本。
在这里插入图片描述

2.2.2 命令指定镜像版本升级(免交互式)

1.命令升级,指定镜像版本,升级成1.18。

[root@k8s-master bck]# kubectl set image deployment wen666 -n test web=nginx:1.18

在这里插入图片描述

2.刷新网页,此时ginx版本为1.18。
在这里插入图片描述

2.2.3 调用vim升级

1.命令交互式升级。

[root@k8s-master bck]# kubectl edit deployment wen666  -n test

在这里插入图片描述
2.找到镜像版本,修改成1.19,保存升级。
在这里插入图片描述
在这里插入图片描述
3.访问网页,查看nginx版本为1.19
在这里插入图片描述

2.3 滚动升级

主流的发布方案:

  • 滚动升级:滚动发布是指每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级到新版本。
  • 蓝绿升级:将目标服务器分为两组,先升级一组上线没问题后再升级另一组。
  • 灰度升级:按照一定百分比升级,例如先升级10%,继续50%,最后剩下的40%。

共同特点:

  1. 新旧版本平滑过度,用户无感知。
  2. 以前都是瀑布式升级,一次性升级所有服务器上的服务会导致诸多问题,比如存在升级失败导致的灾难性的数据丢失、爆发性的流量激增导致用户体感降低,等等。

滚动升级模型图:
在这里插入图片描述

2.3.1 升级流程

实现原理:

  • 我们对pod里的应用升级是使用deployment资源,过程中有个叫做副本集的replicaset资源去完成升级动作。
  • 滚动升级时,先升级一小部分Pod,成功后再升级一部分Pod,最终完成所有Pod升级,整个过程始终有Pod在运行,从而保证了业务的连续性。

rs概念:

  • replicaset,副本集,简称rs,主要维护Pod副本数量,不断对比当前Pod数量与期望Pod数量。

rs用途:

  • deployment每次发布都会创建一个RS作为记录,用于实现滚动升级和回滚。

rs工作原理:

  1. rs是帮deploy管理pod容器的,对其监控、创建和删除。
  2. 当超过deploy.yaml里指定的目标容器数量时,则删除多余容器;当小于目标数量时,则创建容器。
    在这里插入图片描述

滚动升级流程:

  1. 创建的deploy资源后,就会创建一个rs去维护其下的pod容器,所以升级之前就有一个rs。如下图,rs-1为原本就存在,rs-2为滚动升级时新创建的。rs-1下的3个pod都是正常运行,等待后面的升级,而rs-2刚开始创建时就只有一个正在运行的pod。
  2. 滚动升级时,先进入deploy阶段1,新生成一个rs-2,rs-2正常创建一个新pod,等这个新pod创建运行成功后,rs-1就缩减一个pod,此时rs-1就只有2个pod。
  3. 之后进入deploy阶段2,rs-2创建第2个新pod,此时rs-2共有2个pod,一个是刚刚升级完的pod正常运行,一个是正在创建的pod2,而rs-1会在rs-2成功创建第2个pod后再次缩减一个pod,此时rs-1就剩下1个pod。
  4. 接下来进入deploy阶段3,rs-2创建第3个新pod,创建运行成功后rs-1缩减最后一个pod,此时rs-1就没有pod,而rs-2就有3个新pod,滚动升级完成。
    在这里插入图片描述

相关命令:

  1. kubectl get rs #查看RS记录。
  2. kubectl rollout history deployment 【deploy名称】 #版本对应RS记录。

1.新建一个应用,nginx1.17版本。

[root@k8s-master bck]# kubectl  apply -f web666.yaml 

2.将1.17版本升级到1.18版本。

[root@k8s-master bck]# kubectl  set image  deployment wen666 web=nginx:1.18

3.此时镜像版本为1.18,查看rs副本集会有2个,c9结尾代表1.18版本的,86结尾代表1.17版本。

在这里插入图片描述
4.将1.18版本升级到1.19版本。

[root@k8s-master bck]# kubectl set image deployment wen666 web=nginx:1.19

5.此时查看副本集RS记录,96结尾的是1.19版本。
在这里插入图片描述
6.查看升级流程版本记录。

wen666-696f688c86  # 初次部署1.17版本,3个副本。
wen666-5c899556c9 # 部署1.18版本。

1.17 ————> 1.18升级流程:
  1、新建RS,wen666-5c899556c9,并设置副本为1
  2、缩容RS,wen666-696f688c86, 副本数由3到2
  3、扩容RS,wen666-5c899556c9,副本数由1到2
  4、缩容RS,wen666-696f688c86, 副本数由2到1
  5、扩容RS,wen666-5c899556c9,副本数由2到3
  6、缩容RS,wen666-696f688c86, 副本数由1到0

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

7.验证rs版本

[root@k8s-master ~]# kubectl  get rs
[root@k8s-master ~]# kubectl  describe rs wen666-5c899556c9

在这里插入图片描述
8.此时1.19————>1.20,查看rs运转流程。若新建第一个pod没成功,则不会继续往下继续创建。

在这里插入图片描述

2.4 应用回滚

回滚用途:

  • 当项目升级失败时,可以恢复到上一个正常版本。

常用命令:

  • kubectl rollout history deployment/web # 查看历史发布版本
  • kubectl rollout undo deployment/web # 回滚到上一个版本
  • kubectl rollout undo deployment/web --to-revision=2 # 回滚历史指定版本

注意事项:

  1. 回滚是重新部署某一次部署时的状态,即当时版本所有配置

2.4.1 查看历史发布版本

1.查看发布历史版本记录。

[root@k8s-master ~]# kubectl  rollout history deployment wen666

在这里插入图片描述
在这里插入图片描述
2.显示版本发布记录。
在这里插入图片描述

2.4.2 回滚到上一个版本

1.升级1.20版本时失败了。
在这里插入图片描述
2.回滚到上一个版本。

[root@k8s-master bck]# kubectl rollout undo deployment wen666

3.查看回滚RS记录流程。
在这里插入图片描述
在这里插入图片描述

2.4.3 回滚到指定版本

1.查看历史版本记录。

[root@k8s-master ~]# kubectl  rollout history deployment wen666

2.查看rs版本对应关系。

[root@k8s-master ~]# kubectl  describe $(kubectl get rs -o name)|egrep "revision:|Image:"

在这里插入图片描述
3.此时回滚到历史1.19版本。

[root@k8s-master ~]# kubectl rollout undo deployment wen666 --to-revision=3

在这里插入图片描述

4.访问网页验证
在这里插入图片描述

2.4.4 验证升级时会访问到新、老两个版本

  • 版本升级时,会访问到新版本,也会访问到老版本。直到所有的Pod都被替换成新版本,所以会一直能访问到网页。

1.循环访问网页,注意查看版本。

[root@k8s-master ~]# for i in {1..1000} ;do sleep 1 ;curl -I http://192.168.130.145:32659;done

2.升级到1.21版本。

[root@k8s-master bck]# kubectl set image deployment wen666 web=nginx:1.21  --record=true

3.查看访问网页返回的版本,会存在老版本和新版本都能访问到的情况,直到所有的pod都跟换成新rs后,才会一直访问成新版本。
在这里插入图片描述
在这里插入图片描述

2.5 水平扩缩容

基本了解:

  • 水平扩缩容就是对pod副本数量进行增加或减少,依次提高并发。
  • pod副本数量是由yaml文件里的replicas值决定,若创建deploy时没有指定副本数则默认创建一个副本。

概念图:
在这里插入图片描述

1.给deploy副本增加到10个。

[root@k8s-master ~]# kubectl  scale deploy wen666 -n test --replicas=10

在这里插入图片描述
2.给deploy副本减少到5个。

[root@k8s-master ~]# kubectl  scale deploy wen666 -n test --replicas=5

在这里插入图片描述

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

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

相关文章

yolov5配置错误记录

这里是直接没有找到数据集,说明是路径错误。经过设置yaml后, # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: ../autodl-tmp/datasets/neu # dataset root dir tr…

闲鱼/支付宝 自动收货诈骗套路分析

闲鱼/支付宝 自动收货套路分析 他人闲鱼被骗经历 最近发现闲鱼有一种“自动收货”的套路,就是在闲鱼下单后,卖家发一个二维码,称让你支付运费,该二维码以闲鱼之类的logo为诱惑,让你相信是真的运费支付二维码 正如上文知…

Self-Attention结构细节及计算过程

一、结构 上面那个图其实不是那么重要,只要知道将输入的x矩阵转换成三个矩阵进行计算即可。自注意力结构的输入为 输入矩阵的三个变形 Q(query矩阵)、K(key矩阵)、V(value矩阵)构成,…

Java企业级信息系统02—利用组件注解符精简spring配置文件

文章目录 一、学习目标二、打开01的项目三、利用组件注解符精简spring配置文件(一)创建新包,复制四个类(二)修改杀龙任务类(三)修改救美任务类(四)修改勇敢骑士类&#x…

Mac安装docker

一、docker是什么? 1、Docker的三个基本概念: Image(镜像)Container(容器)Repository(仓库) Docker的思想来自于集装箱,集装箱解决了什么问题? 在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了&a…

你还不知道啊,iPhone手机恢复出厂设置的那些事!

案例:手机恢复出厂设置 【友友们,苹果手机想要挂闲鱼,里面有很多隐私。想要恢复出厂设置来清除手机数据,该怎么进行?有什么需要注意的吗?】 iPhone手机想要进行二次销售,我们一般都会采取方法来…

[面试题] 判断二维空间中一点是否在旋转矩形内部

[面试题]:判断二维空间中一点是否在旋转矩形内部 参考: 1. 判断点是否在一个矩形内 2. 向量点乘与叉乘的概念及几何意义 3. 向量叉乘 4. 向量叉乘的正负意义 5. 本工程完整代码 题目描述 已知条件:旋转矩形中心center(x,y), 旋转矩形的长…

asp.net基于web的学生选课成绩管理系统86程序

系统使用Visual studio.net2010作为系统开发环境,并采用ASP.NET技术,使用C#语言,以SQL Server为后台数据库。 本系统主要包含了“登录模块”、“系统用户管理模块”、“课程信息管理模块”、“教师信息管理模块”、“班级信息管理模块”、“…

Word控件Spire.Doc 【打印】教程(2):保打印word文档不显示打印处理对话框

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

对标世界一流|弹性应对“供应链不确定性常态化” ——快消与重资产行业的经验互鉴

1963年,气象学家洛伦兹提出的“蝴蝶效应”表示:“一只蝴蝶在巴西扇动翅膀,有可能会在美国德克萨斯州引起一场龙卷风”。本文希望通过提供快消行业的先进实践,帮助重资产企业从“蝴蝶扇动翅膀”之前就开始行动,避免“龙…

Design principle: Immutability不可变性与对mutable变量的Synchronization方法

不可变性(Immutability)在设计模式中是指一个对象在创建后其状态就不能改变。这是一种编程思想和设计原则。在某些情况下,使用不变对象可以带来许多好处: 简化代码 make things very simple:不可变对象在创建后状态不会…

【问题排查篇】一次业务问题对 ES 的 cardinality 原理探究 | 京东云技术团队

作者:京东科技 王长春 业务问题 小编工作中负责业务的一个服务端系统,使用了 Elasticsearch 服务做数据存储,业务运营人员反馈,用户在使用该产品时发现,用户后台统计的订单笔数和导出的订单笔数不一致! …

21.动态组件 component与keep-alive

目录 1 基本使用 2 按钮切换组件 3 keep-alive 3.1 在切换组件的时候,默认情况下被切换的组件就会被销毁 3.1.1 数据情况 3.1.2 生命周期函数情况 3.2 使用 keep-alive 3.3 keep-alive的生命周期函数 3.4 缓存指定组件 include 3.5 不缓存指定组…

【51单片机】点亮一个LED灯(看开发板原理图十分重要)

🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The Right Path】 🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔基础内容 &#x1f3f3…

HMS Core 6.10.0版本发布公告

分析服务 ◆ 事件分析下新增商品订阅分析报告,帮助开发者了解应用内用户付费订阅概况,评估订阅付费价值; ◆ 营销分析、用户质量、转化分析以及过滤器中,新增广告系列/广告任务通过ID进行搜索的功能,通过更便捷高效的…

【笔试强训选择题】Day8.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录…

Skywalking

Skywalking skywalking是一个apm系统,包含监控,追踪,并拥有故障诊断能力的 分布式系统 一、Skywalking介绍 1.什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin /Pinpoint …

C语言初阶之常量和变量

常量和变量 什么是常量和变量常量示例 定义变量的方法变量的命名变量的分类示例 变量的使用变量的作用域和生命周期作用域生命周期 结语 什么是常量和变量 在C程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起…

BoldReports Embedded Reporting 5.1 Crack

Embed Paginated Reports 嵌入式报告平台,商业智能报告解决方案,探索满足各种业务需求的报告功能,所有功能View Features,像素完美报告,创建像素完美的分页业务报表,随处部署,选择适合您的部署环…

Android---ANR问题分析

目录 ANR 概念 超时检测机制 如何避免 ANR 问题? ANR 分析 ANR 问题线上监控 ANR 概念 ANR(Application Not Response),是指应用程序未响应,Android 系统对于一些事情需要在一定时间范围内完成,如果超过预定时间未能得到有效…