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

news/2024/5/17 12:42:09/文章来源:https://blog.csdn.net/yi_qingjun/article/details/129224891

文章目录

  • 一、基本介绍
  • 二、应用程序生命周期
    • 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: wen666namespace: test
spec:replicas: 3selector:matchLabels:app: wen666template:metadata:labels:app: wen666spec:containers:- name: webimage: nginx:1.16
---
apiVersion: v1
kind: Service
metadata:name: wen666namespace: test
spec:selector:app: wen666ports:- protocol: TCPport: 80targetPort: 80type: 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,并设置副本为12、缩容RS,wen666-696f688c86, 副本数由3到23、扩容RS,wen666-5c899556c9,副本数由1到24、缩容RS,wen666-696f688c86, 副本数由2到15、扩容RS,wen666-5c899556c9,副本数由2到36、缩容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.luyixian.cn/news_show_296513.aspx

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

相关文章

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见…

代码随想录算法训练营第三十二天 | 利润题、覆盖范围题

122.买卖股票的最佳时机II 文档讲解:代码随想录 (programmercarl.com) 视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II_哔哩哔哩_bilibili 状态:根本做不出来,思路太巧了。 思路 想获…

车载红外夜视「升温」

红外夜视赛道,正在升温。 本周,全球车载后视镜头部供应商Gentex宣布,领投以色列热成像技术初创公司ADASKY,后者在B轮融资中拿到了3000万美元。按照计划,Gentex将协助ADASKY将红外夜视技术推向汽车市场。 事实上&#x…

真题详解(归纳法)-软件设计(六十七)

真题详解(关系模型)-软件设计(六十六)https://blog.csdn.net/ke1ying/article/details/130495791 1、2018上半年 将小阶向大阶对奇,尾数右移动 解析: 0.23 * 10的2次方 0.22 *10的3次方 第一步:0.023*10的3次方,…

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …

【Nginx基础篇】Linux虚拟机安装nginx

目录 一、版本区别 二、编译安装 三、启动nginx 关于防火墙 四、安装成系统服务 一、版本区别 常用版本分为四大阵营 Nginx开源版 http://nginx.org/ Nginx plus 商业版 https://www.nginx.com openresty http://openresty.org/cn/ Tengine http://tengine.taobao.org/ …

mobile代码打APK包

1、安装Android SDK Android SDK 下载地址: http://www.androiddevtools.cn/ 下载位置 下载后解压 打开解压文件,点击 SDK Manager.exe 进行安装 安装组件,这要选 Android 8.0.0 或者以上版本 再次安装,发现没什么可以安装了 2…

晚唐诗人杜荀鹤及其十首古诗赏析

一、关于出身的传说 他出身寒微。曾数次赴长安应考,不第还山。相传他是杜牧出妾之子。他诗语言通俗、风格清新,后人称“杜荀鹤体”。他就是晚唐诗人杜荀鹤。 据说,杜牧在会昌末年任池州刺史时,妾程氏有孕,为杜妻所逐&…

详解事务模式和 Lua 脚本,带你吃透 Redis 事务

先说结论: Redis 的事务模式具备如下特点: 保证隔离性;无法保证持久性;具备了一定的原子性,但不支持回滚;一致性的概念有分歧,假设在一致性的核心是约束的语意下,Redis 的事务可以…

GUI编程(一)

1、简介 GUI的核心技术:Swing、 AWT 1、外观不太美观,组件数量偏少 2、运行需要JRE环境 为什么我们要学习? 组件(JTable,JList等)很多都是MVC的经典示范,学习也可以了解mvc架构。工作时,也有可能遇见需要维护N年前awt/swing写的…

港联证券|4连板的AI+传媒概念股火了,近5亿资金抢筹

今天,沪深两市共51股涨停,除掉10只ST股,合计41股涨停。别的,11股封板未遂,全体封板率为81%。 涨停战场:长江传媒封单量最高 从收盘涨停板封单量来看,长江传媒封单量最高,有39.96万手…

Linux 内存管理 pt.2

哈喽大家好我是咸鱼,在《Linux 内存管理 pt.1》中我们学习了什么是物理内存、虚拟内存,了解了内存映射、缺页异常等内容 那么今天我们来接着学习 Linux 内存管理中的多级页表和大页 多级页表&大页 在《Linux 内存管理 pt.1》中我们知道了内核为每…

【linux的学习与软件安装】

文章目录 linux的学习一、工具安装与联网?二、Linux软件安装1.安装jdk2.安装MySQL安装redis linux的学习 一、工具安装与联网? 1.1安装好VM后 进入vi /etc/sysconfig/network-scripts/ifcfg-ens33 然后ip addr 查看ip 1.2打开IDEA的tools 二、Linux软…

uniapp - 实现微信小程序电子签名板,横屏手写姓名签名专用写字画板(详细运行示例,一键复制开箱即用)

效果图 实现了在uniapp项目中,微信小程序平台流畅的写字签名板(也可以绘图)功能源码,复制粘贴,改改样式几分钟即可搞定! 支持自动横屏、持预览,真机运行测试非常流畅不卡顿。 基础模板 如下代码所示。 <template><view class=

Shell脚本2

自定义局部变量 :定义在一个脚本文件中的变量 只能在这个脚本文件中使用的变量&#xff0c;局部变量 语法&#xff1a; var_namevalue 变量定义规则 变量名称可以有字母,数字和下划线组成, 但是不能以数字开头 等号两侧不能有空格 在bash环境中, 变量的默认类型都是字符串…

Softing线上研讨会 | 轻松访问XML文件中的过程数据

| 线上研讨会时间&#xff1a;2023年5月8日下午4点或晚上10点 对于传统车间的系统应用和创新的物联网解决方案而言&#xff0c;高效访问机器和流程数据至关重要。而在现有工厂中&#xff0c;过程数据通常以XML文件的形式出现。对此&#xff0c;Softing Industrial提供了一个用…

【华为OD机试 2023最新 】箱子之字形摆放(C语言题解 100%)

文章目录 题目描述输入描述输出描述备注用例题目解析C语言题目描述 有一批箱子(形式为字符串,设为str), 要求将这批箱子按从上到下以之字形的顺序摆放在宽度为 n 的空地,请输出箱子的摆放位置。 例如:箱子ABCDEFG,空地宽度为3,摆放结果如图: 则输出结果为: AFG BE C…

2023年房地产抵押贷款研究报告

第一章 概述 房地产抵押贷款是一种以房地产为抵押品的贷款形式&#xff0c;包括个人和企业两种情况。个人房地产抵押贷款是指个人将名下房产作为抵押品向银行或其他金融机构申请贷款&#xff0c;而企业房地产抵押贷款则是指企业将自己名下的商业房产作为抵押品向金融机构申请贷…

2-Lampiao百个靶机渗透(精写-思路为主)框架漏洞利用2

特别注明&#xff1a;本文章只用于学习交流&#xff0c;不可用来从事违法犯罪活动&#xff0c;如使用者用来从事违法犯罪行为&#xff0c;一切与作者无关。 文章目录 前言一、环境重新部署二、AWVSxray联动和xraybs联动1.安装AWVSxray2.让xray和bs先联动3.AWVS和xray联动 三、p…

多城市门店店铺展示地图导航pc/h5系统开发

多城市门店店铺展示地图导航pc/h5系统开发 系统设置&#xff1a; 网站标题、网站副标题、Logo图、网站背景图、网站底部图、网站底部版权、网站ICP备案、腾讯地图Key。 店铺列表&#xff1a; 店铺名称、店铺图标、设备、电话、省市区、详细地址。 添加店铺&#xff1a; 店铺…