Deployment 升级应用2

news2024/9/23 17:15:26

上次我们说到自己手动的做使用 RS 的方式来升级 pod ,感觉还是蛮复杂的,并且容易弄错,实际生产过程中,肯定不会这样来弄,很危险

那么今天我们来分享 Deployment 的方式来显示的升级应用吧

Deployment 的方式升级应用

对于之前的操作方式有没有感觉还是比较繁琐的,还需要自己去切换流量,自己去创建新的 RS ,甚至最后还要将旧的 RS 删除掉,甚是麻烦

我们来玩一个更加高阶的资源,也是比较容易的,为了接下来的案例清晰,我们就把上述的 RS 全部删除掉,留下 Service 后续可以使用

Deployment 是使用应用程序声明的方式来升级应用,而不是通过 RS 或者 RC 了

实际上创建一个 Deployment 资源,其实也会创建一个 RS 资源,那么 Deployment 是拿来做啥的呢?我们可以理解为协调资源的

实践 demo

创建一个 deploy ,mydeploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: newkubia
spec:
  replicas: 3
  selector:
    matchLabels:
      app: newkubia
  template:
    metadata:
      name: newkubia
      labels:
        app: newkubia
    spec:
      containers:
      - image: xiaomotong888/newkubia:v1
        name: newkubia
  • 咱们创建一个 deployment
  • 命名为 newkubia
  • 副本数为 3 个
  • 匹配的pod 标签是 newkubia
  • RS 控制的模板是 创建出来的 容器名为 newkubia
  • 标签也是 newkubia

kubectl create -f mydeploy.yaml --record

现在我们通过上述指令来创建一个 Deployment,和其他资源一样,Deployment 我们可以缩写为 deploy

此处的 –record 是什么意思呢?带上这个参数 deploy 会记录我们历史版本

当然,我们也可以使用如下指令来查看 deploy 的状态

kubectl rollout status deploy newkubia

当然对于 kubectl describe , edit , get 都是适用于 deploy

我们可以在来看看,是不是创建了一个 RS

上面的这些 pod 其实也都是这个 RS 来创建出来的我们通过 RS 和 pod 的名字就可以辨别出来

上述例子中:

RS:

newkubia-6597db5b9c

pod:

newkubia-6597db5b9c-*

这个随机字符串,实际上是 Deployment 和 RS 中的 pod 模板放在一起计算出来的哈希值

我们将第一个例子用到的 Service 标签修改为 newkubia,进入 任意一个 pod ,访问一下服务地址,看看效果

如我们所期望的,也是我们想要的效果

使用 Deployment 的方式升级应用

对于使用 Deployment 升级应用,我们需要知道 Deployment 涉及 2 个升级策略:

  • RollingUpdate

滚动升级,这个策略会渐进式的删除旧的 pod,同时创建新的 pod,整个过程,都保持咱们的服务是可用的,deploy 升级默认是使用这种策略

  • Recreate

会一次性删除掉旧的 pod ,然后创建新的 pod,这种策略和之前我们说到过的方式,效果上咱们的服务会中断一段时间,这个时间具体是多久,就看你的手速了

为了我们在升级 deploy 的时候,能够肉眼看出升级过程,我们将最小的准备时间设置大一点,这样我们可以看得清楚一些,

可以 kubectl edit deploy newkubia在 deploy spec 下面 添加 minReadySeconds: 10 ,保存即可

当然 k8s 还提供另外一个 patch 的方式来简单修改 yaml 中的少许字段:

kubectl patch deploy newkubia -p '{"spec":{"minReadySeconds":10}}'

kubectl set image deploy newkubia newkubia=xiaomotong888/newkubia:vv2

通过图中的效果,我们确实清晰可以看到 pod 是在滚动升级的,效果是先创建了一个新版本的 pod,运行正常后,会杀掉一个旧的 pod,再创建一个新版本的 pod,最终直到滚动升级 ok

我们还是进入到任意容器内,访问 SVC ,查看效果如何

可以看到,正常访问到的 SVC ,响应的 v2 版本,再次说明咱们升级是成功的

整个过程中,我们没有手动设置过 Deployment 的升级策略,前面有说到过默认是 RollingUpdate ,我们可以查看一下咱创建的 deploy 的详情

整个升级过程中,我们就执行了一条 deploy 升级命令,是不是超级简单,不需要自己手动去增删 RS,也不需要去修改 Service 管控的标签, Deployment 一键帮助我们完成,是不是很高效

说一说回滚

咱们不仅只会升级,若升级的程序有啥问题,那么岂不是还需要再次升级一个旧的版本?

如何升级呢?还是和刚才升级的方式一致吗?当然不是

咱们升级那么简单,回滚也是可以那么简单

回滚的话,我们可以直接执行:

kubectl rollout undo deploy newkubia

查看 deploy 执行过程状态
kubectl rollout status deploy newkubia

回滚成功,我们来检查一下 rs 和 pod ,这里可以注意下 pod 的名字和 RS 的名字的特征

那么如何指定版本回滚呢?

指定版本回滚也是可以滴,咱们可以通过如下指令查看 deploy 管理升级记录(有升级记录,是因为我们最开始创建 deploy 的时候,指定了 --record

kubectl rollout history deploy newkubia

指定版本回滚

kubectl rollout undo deploy newkubia --to-revision=xx

指定版本回滚也是回滚成功了,这里我们可以继续和上述方式一样检查 rs 和 pod 的特征,然后再 进入到 pod 中,访问 Service 的地址,看看效果是否是我们期望的

看到这里,会不会有这些疑问呢?

  • 为什么我们升级 v2 版本之后 之前的 RS 还在?
  • 为什么 deploy 会有升级记录?

这里来统一分享一下理解:

deploy 会有升级记录,是因为我们在创建 deploy 的时候,指定了 --record,因此 deploy 在升级版本的时候会记录信息

升级新的版本之后,就的 RS 还在,这个就不难理解了,这个是为了我们回滚或者跳转到指定版本的时候,能够直接使用原有的 RS,底层去修改副本数就可以了

整个过程的管理方式是这样的:

deploy 管理多个 RS,RS 管理多个 pod

deploy 管理多个版本 RS ,我们可以理解为是这样的

一开始 deploy 管理着 1 个 RS1,RS1 管理着多个 pod:v1

当我们进行升级 v2 版本的时候,deploy 便会创建 RS2,并且 RS2 管理着 Pod:v2,RS1 仍然继续保留

当我们进行回滚的时候,也是类似的,但是不会创建新的 RS,会直接使用我们要回滚的版本对应的 RS,例如回滚到 v1 版本

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~
多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

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

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

相关文章

3dmax崩溃后如何恢复文件?

当意外或突然关闭 3ds Max 场景时,有时会出现恢复 3ds Max 场景的问题。在处理任何项目的过程中,有时需要恢复 3ds Max 场景,为此在专用文件夹中创建备份副本。如果您使用的是 Windows 操作系统并且未更改项目位置或不知道项目位置&#xff0…

如何通过nginx代理实现外网访问内网mysql或oracle数据库

项目开发部署中经常会遇到MySQL或Oracle数据库安装在内网,而我们的应用服务只能部署在外网,如果实现外网服务访问连接内网的数据库呢?本次介绍如何通过Nginx配置实现外网访问内网数据库。 1、前置机服务器 首先要保证有一台前置机服务器既可…

为Android构建现代应用——主体结构

创建Screents和ViewModels 在前面的章节中,我们已经分析了OrderNow项目的理论概念和我们将赋予的组织。 在本章中,我们将开始实现初始结构和模板,这将联接每一个应用程序的部分。 首先将添加以下带有各自视图模型的主屏幕: •…

到底什么是前后端分离

目录 Web 应用的开发主要有两种模式: 前后端不分离 前后端分离 总结 Web 应用的开发主要有两种模式: 前后端不分离 前后端分离 理解它们的区别有助于我们进行对应产品的测试工作。 前后端不分离 在早期,Web 应用开发主要采用前后端不…

“云上新气象”,VDI+IDV混合部署,麒麟信安云正式上线某市气象局!

阴晴冷暖,风云变幻,气象与人们的生活密切相关,气象局信息系统的智慧高效运营对于提升灾害防御能力、城市气象观测等方面具有重要作用,随着气象业务范围的不断扩展,气象局的信息化建设与数字化转型也亟需提上日程。 走…

【Solr】Solr搜索引擎使用

文章目录 一、什么是Solr?二 、数据库本身就支持搜索啊,干嘛还要搞个什么solr?三、如果我们想要使用solr那么首先我们得安装它 一、什么是Solr? 其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某…

Python入门准备

安装并配置Python 1、想要更新终端里Python的版本: 在python.org官网上下载最新版,下载安装以后,在终端输入python3进行询问。 2、完成Python环境的安装(Linux:操作系统,基于Cent0S7) 在Linux系统上安装Python需要…

中小学分班查询系统如何制作?这个方法3分钟轻松搞定

暑假一过完,新学年即将开始,学校面临着一个重要的任务:学生分班。无论是新生入学还是低年级升高年级,都需要进行分班工作。这对负责分班的老师们来说,增加了相当大的工作量和挑战。 在开学前,如何快速搞定…

Pure Admin 图标篇

1. 官方图标讲解地址 B站搜索:vue-pre-admin之图标篇,作者“乐于分享的程序员小铭” 2. 实操 1. iconify官网 Icon Sets • Iconify 2. 在build->optimize.ts 中,配置所用的Iconify icon包 如: "iconify-icons/ep&quo…

LNK 2001 问题的一种解决办法

问题: 可能有这样的报错,error LNK 2001: 无法解析的外部符号" protected: virtual void __thiscall testing::Test::SetUp(void)"。 解决办法: 换了各编译器就好了,从第二个换到了第一个。 猜测:这里是因…

开江县“五社联动 关爱一老一小“主题活动之银龄爱齿健康关爱计划

为进一步宣传和推动“五社联动”关爱“一老一小”的社工服务理念,近日,开江县网格员社会工作服务中心携手彭州市葡萄树社会工作服务中心链接爱心单位(夜郎古酒)捐赠的1440支牙膏(合和泰品牌牙膏)&#xff0…

Electron从构建到打包程exe应用

Electron从构建到打包程exe应用 Electron文档搭建网页装载到 BrowserWindow中定义全局对象进程之间通信打包应用程序对代码进行签名 Electron文档 搭建 创建一个文件夹,在根目录执行以下几个命令 1.npm init 2.npm install electron --save-dev 3.根目录新增main…

route_group时调整routing rule via array大小

使用route_group secondary pg pin时需要multi via/double via,可以使用如下办法。 用create_routing_rule -vias {{via_def_name array_size NR/R} {xx xx xx}} R和NR就是能不能旋转 set_routing_rule net_name -rule rule_name -max_routing_layers MEx -max_la…

RHCSA(一)

1、在VMware上创建虚拟机以及安装Linux操作系统,使用ssh进行远程连接 1.创建虚拟机 2.安装Linux系统 3.使用Xshell进行远程ssh连接终端 进入了Linux系统,打开终端输入ifconfig回车得到了虚拟网卡的IP地址为192.168. 163.128 打开Xshell远程连接软件…

Longhorn vs Rook vs OpenEBS vs Portworx vs IOMesh:细说 5 款 K8s 持久化存储产品优劣势

云原生时代下,越来越多的企业开始使用 Kubernetes(K8s)承载数据库、消息中间件等“生产级”有状态工作负载。由于这些应用对数据持久保存、性能、容量扩展和快速交付具有较高的要求,企业往往需要采用专为 Kubernetes 环境设计的持…

入侵检测——IDS概述、签名技术

1. 什么是IDS? IDS(intrusion detection system)入侵检测系统,是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。它会对系统的运行状态进行监视,发现各种攻击企…

力扣959. 由斜杠划分区域

题目描述: 在由 1 x 1 方格组成的 n x n 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。 给定网格 grid 表示为一个字符串数组,返回 区域的数量 。 请注意,反斜杠字符是转义的&…

乐维监控 | 如何快速关闭网络设备所有端口

在运维监控实践中,由于不同的运维人员可能会关注不同的监控指标,因此乐维监控在监控网络设备时,会默认开启所有的端口,尽可能多的覆盖监控指标,避免遗漏重要指标。但是,这样又会带来新的问题,在…

ITIL4—服务管理的四个维度

服务管理的四个维度 上一章概述了对服务管理至关重要的概念。一个组织的目标是为其利益相关者创造价值,这是通过提供和消费服务来实现的。ITIL SVS描述了组织的各个组成部分协同工作创造该价值的方式。但是,在进一步探讨之前,必须首先介绍服…

嵌入式工程师有发展前途吗?

如果你是真的喜欢嵌入式,那鼓励你顺从内心指引。毕竟人生不仅仅是向钱看的。根据马斯洛需求模型,在物质条件基本满足后就会进而强调精神需求,当然现今消费主义社会,你可以选择砸钱下猛药感官刺激来安抚虚无的内心,但这…