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…

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的数据库是独立存在的,不存在统一管理 …

GitLab安装配置

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

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

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

【嵌入式学习】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证明其网络安全能力。 这是很重要的一环,因为随着汽车网络安全相关强…

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

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

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

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

【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;、标准粒子群算法支持向量机和改进粒子群算法支持向量机三种方法对负荷进行…

LeetCode每日一题【209. 长度最小的子数组】

题目&#xff1a; 思路1&#xff1a;暴力循环 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int len INT_MAX;for(int i0;i<nums.size();i){int sum 0;for(int ji;j<nums.size();j){sumnums[j];if(sum>target){len mi…

推荐彩虹知识付费商城免授权7.0源码

彩虹知识付费商城免授权7.0源码&#xff0c;最低配置环境 PHP7.2 1、上传源码到网站根目录&#xff0c;导入数据库文件&#xff1a;xydai.sql 2、修改数据库配置文件&#xff1a;/config.php 3、后台&#xff1a;/admin 账号&#xff1a;admin 密码&#xff1a;123456 4、前…

八、计算机视觉-边界填充

文章目录 前言一、原理二、具体的实现 前言 在Python中使用OpenCV进行边界填充&#xff08;也称为zero padding&#xff09;是一种常见的图像处理操作&#xff0c;通常用于在图像周围添加额外的像素以便进行卷积或其他操作。下面是使用OpenCV进行边界填充的基本原理和方法 一…

BufferedImage 这个类在jdk17中使用哪个import导入

在Java开发中&#xff0c;BufferedImage 类是用于处理图像数据的一个类。在JDK 17中&#xff0c;BufferedImage 类属于 java.awt.image 包。因此&#xff0c;要在你的Java程序中使用 BufferedImage 类&#xff0c;你需要通过以下方式导入该类&#xff1a; import java.awt.ima…

OpenCV DNN 活体检测项目环境配置等各阶段tips

date: 2020-09-22 14:53 资料来源《OpenCV深度学习应用与性能优化实践》第八章。 在复现这个项目的时候发现一些可以调整的小tips。 环境配置阶段 使用conda 创建python 工作环境时&#xff0c;注释掉requirems.txt 里的opencv-python-inference-engine4.1.2.1&#xff0c;安…