Deployment

一、Deployment:管理部署发布的控制器

1、背景问题:

应用中的 Pod 如果出现了一些故障,如何保证集群内可用 Pod 的数量?

如何为所有 Pod 更新镜像版本?

在更新过程中,如何保证服务的可用性?

更新过程中,如果发现了问题,如何快速回滚到上一个版本?

2、Deployment 功能:

① Deployment 定义了 Pod 期望数量,比如说应用 A 期望 Pod 数量是四个,controller 就会持续维持 Pod 数量为期望的数量。当 Pod 出现问题时,controller 能进行恢复,保证可用的 Pod 数量与期望数量一致;

配置 Pod 发布方式,也就是说 controller 会按照用户给定的策略来更新 Pod,而且更新过程中,也可以设定不可用 Pod 数量在多少范围内;

如果更新过程中发生问题的话,可以“一键”回滚,也就是通过一条命令或者一行修改,够将 Deployment 下面所有 Pod 更新为某一个旧版本 。

3Deployment 语法:

① apiVersion:apps/v1 是说 Deployment 当前所属的组是 apps,版本是 v1。

② metadata 是 Deployment 的元信息。

③ Deployment.spec 中首先要有一个核心的字段 replicas,定义期望的 Pod 数量。

④ selector 是 Pod 选择器,它的 Labels 必须匹配 metadata 的 image.labels,也就是 app.nginx。

⑤ template 包含了两部分内容:

一部分是期望 Pod 的 metadata,其中包含了 labels;

第二部分是 Pod.spec,是 Deployment 最终创建出来 Pod 的时候所用的容器的规范。

4查看 Deployment 状态:

(1) 可以通过 kubectl get deployment 查看 Deployment 总体的一个状态。

(2) 更新镜像:

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1

(3) 快速回滚:

通过 kubectl rollout undo 这个命令,可以回滚到 Deployment 上一版本;

通过“rollout undo”加上“to-revision”来指定可以回滚到某一个具体的版本。

二、DeploymeStatus

deploymentStatus 中描述的三个其实是它的 conversion 状态,也就是 Processing、Complete 以及 Failed。

① Processing 指的是 Deployment 正在处于扩容和发布中。如果在 Processing 状态的 deployment 它所有的 replicas 及 Pod 副本全部达到最新版本,而且是 available的话,就可以进入 complete 状态。

② complete 状态如果发生了扩缩容的话,也会进入 processing 这个处理工作状态。

如果在处理过程中遇到一些问题:比如拉镜像失败了,或者说 readiness probe 检查失败了,就会进入 failed 状态;进入 failed 状态之后,除非所有的 replicas 均变成 available,而且是 updated 最新版本,deployment 才会重新进入 complete 状态。

三、架构设计

1、管理模式

Deployment 只负责管理不同版本的 ReplicaSet,由 ReplicaSet 来管理具体的 Pod 副本数,每个 ReplicaSet 对应 Deployment template 的一个版本。

每一次修改 template,都会生成一个新的 ReplicaSet,这个 ReplicaSet 底下的 Pod 其实都是相同的版本。

2扩/缩容模拟

有一个 Deployment,它的副本数是 2,对应的 ReplicaSet 有 Pod1 和 Pod2。如果修改 Deployment replicas, controller 就会把 replicas 同步到当前版本的 ReplicaSet 中,这个 ReplicaSet 发现当前有 2 个 Pod,不满足当前期望 3 个,就会创建一个新的 Pod3。

3、发布模拟

Deployment 当前初始为 template1 个版本。template1 这个 ReplicaSet 对应的版本下有三个 Pod:Pod1,Pod2,Pod3。

如果修改 template 中一个容器的 image, Deployment controller 就会新建一个对应 template2 的 ReplicaSet。创建出来之后 ReplicaSet 会逐渐修改两个 ReplicaSet 的数量,比如它会逐渐增加 ReplicaSet2 中 replicas 的期望数量,从而逐渐减少 ReplicaSet1 中的 Pod 数量。

最终达到的效果是:新版本的 Pod 为 Pod4、Pod5和Pod6,旧版本的 Pod 已经被删除了。

4、回滚模拟

根据上面的发布模拟可以知道 Pod4、Pod5、Pod6 已经发布完成。如果发现当前的业务版本是有问题的,可以回滚为旧版本的 template1。

Deployment 会重新修改 ReplicaSet1 中 Pod 的期望数量,把期望数量修改为 3 个,且会逐渐减少新版本也就是 ReplicaSet2 中的 replica 数量,最终的效果就是把 Pod 从旧版本重新创建出来。

初始版本中 Pod1、Pod2、Pod3 是旧版本,而回滚之后其实是 Pod7、Pod8、Pod9。就是说它的回滚并不是把之前的 Pod 重新找出来,而是重新创建出符合旧版本 template 的 Pod。

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

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

相关文章

PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态

PyCharm 调试过程中控制台 [Console] 窗口内运行命令 - 实时获取中间状态 1. yongqiang.py2. Debugger -> Console3. Show Python PromptReferences 1. yongqiang.py #!/usr/bin/env python # -*- coding: utf-8 -*- # yongqiang chengfrom __future__ import absolute_imp…

pytorch入门笔记二

torch.nn.Sequential torch.nn.Sequential是一个容器,利用此容器可以快速简单的搭建一个简单的神经网络。这里以搭建一个三层神经网络为例。 首先该容器的参数分别是上一层到下一层的权重、激活函数,以此循环。 这里torch提供快速生成网络权重的方法&am…

MyBatis框架-动态SQL

动态SQL 什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必…

Axios学习

文章目录 Axios1.Json-server的搭建2.Axios的基本使用3.Axios的其他使用4.Axios响应结果的结构分析5.Axios配置对象详细说明6.axios的默认配置7.axios创建实例对象(create)8.axios拦截器1.请求拦截器2.响应拦截器 9.取消请求10.源码分析 Axios 1.Json-s…

小迪安全25WEB 攻防-通用漏洞SQL 读写注入MYSQLMSSQLPostgreSQL

#知识点: 1、SQL 注入-MYSQL 数据库 2、SQL 注入-MSSQL(SQL server) 数据库 3、SQL 注入-PostgreSQL 数据库 #详细点: Access 无高权限注入点-只能猜解,还是暴力猜解 因为access的数据库是独立存在的,不存在统一管理 …

05 SS之结合SS+Redis+JWT实现认证

之前的一切的有一个比较显著的问题是: 假如用户主动登出, 这意味着系统应将用户的token作废, 但实际上并未实现这一步, 导致了即使用户登出, 只要token在有效期内, 用户仍能凭借token直接进入. 即token处于一个无法销毁的状态. 可以借助Redis. 核心步骤是 ① 第一次登陆成…

GitLab安装配置

一、GitLab的简介 GitLab是开源的代码托管平台,提供版本控制功能、代码审查、持续集成等工具,帮助团队协作开发软件项目。用户可以创建仓库存储代码,管理问题追踪,部署自动化流程等。 二、GitLab的安装 1、Rocky_Linux 下载安装 …

c# B+树

B 树是一种自平衡的树数据结构,通常用于数据库和文件系统等需要大量数据插入、删除和搜索操作的场景。与 B 树不同的是,B 树的内部节点不存储数据,只用作索引,所有的数据都存储在叶子节点上。这种特性使得 B 树的数据检索效率更高…

应用回归分析:多重共线性

多重共线性的概念 在回归分析中,我们通常关注的是如何利用一个或多个自变量(解释变量)来预测一个因变量(响应变量)。当我们使用多元线性回归模型时,理想的情况是模型中的每一个自变量都能提供独特的、对因…

【嵌入式学习】C++QT-Day6-C++基础

作业: 1.思维导图 见我的博客:https://lingjun.life/wiki/EmbeddedNote/19Cpp 2.编程题: 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了…

2024 前端面试题(GPT回答 + 示例代码 + 解释)No.114 - No.121

本文题目来源于全网收集,答案来源于 ChatGPT 和 博主(的小部分……) 格式:题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 上一篇链接:2024 前端面试题(GPT回答 示例…

汽车网络安全--关于供应商网络安全能力维度的思考

目录 1.关于CSMS的理解 2.OEM如何评审供应商 2.1 质量评审 2.2 网络安全能力评审 3.小结 1.关于CSMS的理解 最近在和朋友们交流汽车网络安全趋势时,讨论最多的是供应商如何向OEM证明其网络安全能力。 这是很重要的一环,因为随着汽车网络安全相关强…

三防平板电脑丨亿道工业三防平板丨三防平板定制丨机场维修应用

随着全球航空交通的增长和机场运营的扩展,机场维护的重要性日益凸显。为确保机场设施的安全和顺畅运行,采取适当的措施来加强机场维护至关重要。其中,三防平板是一种有效的工具,它可以提供持久耐用的表面保护,使机场维…

前端中的强缓存与协商缓存

强缓存:是直接从本地缓存中加载资源,不向服务器发起请求,除非过期了。这种方式可以减少网络延迟,提高页面加载速度,但无法保证资源的最新性 皮一下 : 不管你咋样,我都不搭理你,除非我真的无聊了&#xff0…

微信小程序 搜索框实现模糊搜索(带模拟数据,js,wxml,wxss齐全)

最近在做一个小程序的页面,搜索框困扰了我很久,今天终于把搜索框给做了出来,记录一下过程 我主要使用的就是wx的if,当我输入框用户点击的时候,我前面的显示界面添加上false属性,然后我搜索页面显示出true的…

小程序API能力汇总——基础容器API(三)

ty.getAccountInfo 获取小程序账号信息 需引入MiniKit,且在>3.1.0版本才可使用 参数 Object object 属性类型默认值必填说明completefunction否接口调用结束的回调函数(调用成功、失败都会执行)successfunction否接口调用成功的回调函数…

【Jvm】类加载机制(Class Loading Mechanism)原理及应用场景

文章目录 Jvm基本组成一.什么是JVM类的加载二.类的生命周期阶段1:加载阶段2:验证阶段3:准备阶段4:解析阶段5:初始化 三.类初始化时机四.类加载器1.引导类加载器(Bootstrap Class Loader)2.拓展类…

leetcode13题罗马数字转成整数

代码 public static int romanToInt(String s) {// 创建一个HashMap&#xff0c;将罗马数字字符映射为整数值HashMap<Character, Integer> map new HashMap<>();map.put(I, 1);map.put(V, 5);map.put(X, 10);map.put(L, 50);map.put(C, 100);map.put(D, 500);map.…

Eclipse 创建 Hello World 工程

Eclipse 创建 Hello World 工程 1. Hello WorldReferences Download and install the Eclipse IDE. 1. Hello World Eclipse -> double click -> Launch 单击蓝色方框 (右上角) 最大化 IDE File -> New -> C Project -> Finish Project name&#xff1a;工程名…

Matlab|基于支持向量机的电力短期负荷预测【最小二乘、标准粒子群、改进粒子群】

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序主要是对电力短期负荷进行预测&#xff0c;采用三种方法&#xff0c;分别是最小二乘支持向量机&#xff08;LSSVM&#xff09;、标准粒子群算法支持向量机和改进粒子群算法支持向量机三种方法对负荷进行…