当前位置: 首页 > article >正文

k8s主要控制器简述(一)ReplicaSet与Deployment

目录

一、ReplicaSet

关键特性

示例

解释

支持的 Operator

二、Deployment

1. 声明式更新

示例

2. 滚动更新

示例

3. 回滚

示例

4. ReplicaSet 管理

示例

5. 自动恢复

示例

6. 扩展和缩容

示例

示例


一、ReplicaSet

ReplicaSet 是 Kubernetes 中的一个核心控制器,用于确保指定数量的 Pod 副本始终处于运行状态。它的主要职责是维护一组稳定的 Pod 副本,确保在任何时候都有指定数量的 Pod 在运行。ReplicaSet 是 Kubernetes 中实现 Pod 水平扩展的基础组件之一。

关键特性
  1. 副本管理

    • ReplicaSet 的核心功能是确保指定数量的 Pod 副本始终在运行。你可以通过 replicas 字段指定期望的 Pod 副本数量。

    • 如果实际运行的 Pod 数量少于预期,ReplicaSet 会自动创建新的 Pod。

    • 如果实际运行的 Pod 数量多于预期,ReplicaSet 会自动删除多余的 Pod。

  2. 标签选择器(Label Selector)

    • ReplicaSet 使用标签选择器来识别它管理的 Pod。只有那些与选择器匹配的 Pod 才会被 ReplicaSet 管理。

    • 标签选择器可以是简单的等值匹配(matchLabels),也可以是更复杂的集合匹配(matchExpressions)。

  3. Pod 模板

    • ReplicaSet 使用 Pod 模板来创建新的 Pod。Pod 模板定义了 Pod 的规格,包括容器镜像、环境变量、卷等。

    • 当 ReplicaSet 需要创建新的 Pod 时,它会根据 Pod 模板生成新的 Pod 实例。

  4. 自动恢复

    • 如果某个 Pod 意外终止(例如,节点故障或手动删除),ReplicaSet 会自动创建一个新的 Pod 来替换它,以确保 Pod 副本数量始终符合预期。

  5. 手动管理

    • ReplicaSet 通常不直接由用户创建和管理,而是通过更高级的控制器(如 Deployment)来管理。用户通常只需要与 Deployment 交互,Deployment 会自动创建和管理 ReplicaSet。

示例

以下是一个简单的 ReplicaSet 定义示例:

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: my-replicaset
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx

在这个示例中:

  • replicas: 3 表示期望有 3 个 Pod 副本在运行。

  • selector 指定了 ReplicaSet 管理的 Pod 的标签为 app: my-app

  • template 定义了 Pod 的规格,包括容器镜像 nginx

以下是一个使用几个匹配的ReplicaSet实例

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: my-replicaset
spec:replicas: 3selector:matchExpressions:- key: appoperator: Invalues:- my-app- my-backup-app- key: environmentoperator: NotInvalues:- productiontemplate:metadata:labels:app: my-appenvironment: stagingspec:containers:- name: my-containerimage: nginx

解释

  1. selector.matchExpressions

  • 这是集合匹配的核心部分,允许你定义多个标签选择规则。
  • 每个规则由 keyoperatorvalues 组成。
  1. 规则 1:app 标签
  • key: app:表示选择标签键为 app 的 Pod。
  • operator: In:表示标签值必须在 values 列表中。
  • values: [my-app, my-backup-app]:表示选择标签值为 my-appmy-backup-app 的 Pod。
  1. 规则 2:environment 标签

  • key: environment:表示选择标签键为 environment 的 Pod。
  • operator: NotIn:表示标签值不能出现在 values 列表中。
  • values: [production]:表示排除标签值为 production 的 Pod。
  1. 综合效果

    • 这个 ReplicaSet 会选择满足以下条件的 Pod:

      • 标签 app 的值为 my-appmy-backup-app

      • 标签 environment 的值不为 production

  2. Pod 模板

    • template 部分,定义了新创建的 Pod 的标签为 app: my-appenvironment: staging

    • 这些标签满足 ReplicaSet 的选择条件,因此这些 Pod 会被 ReplicaSet 管理。

支持的 Operator

matchExpressions 中,operator 可以取以下值:

  • In:标签值必须在 values 列表中。

  • NotIn:标签值不能在 values 列表中。

  • Exists:标签键必须存在(不需要指定 values)。

  • DoesNotExist:标签键必须不存在(不需要指定 values)。

二、Deployment

Deployment 是 Kubernetes 中用于管理无状态应用的高级控制器。它基于 ReplicaSet 实现,提供了声明式更新、滚动更新和回滚等功能。Deployment 是 Kubernetes 中最常用的控制器之一,特别适用于需要频繁更新和扩展的应用场景。

1. 声明式更新

Deployment 允许你通过声明式的方式更新应用。你只需要修改 Deployment 的 YAML 文件(例如更新镜像版本),然后使用 kubectl apply 命令应用更改,Deployment 会自动处理更新过程。

示例

假设你有一个 Deployment,运行的是 nginx:1.18 镜像。现在你想将镜像更新为 nginx:1.19

Deployment 定义文件 (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: nginximage: nginx:1.18

更新步骤

  1. 修改 deployment.yaml 文件,将 image: nginx:1.18 改为 image: nginx:1.19

  2. 使用 kubectl apply 应用更新:

    kubectl apply -f deployment.yaml
  3. Deployment 会自动触发更新流程,逐步替换旧的 Pod 为新的 Pod。


2. 滚动更新

Deployment 默认支持滚动更新策略,逐步替换旧的 Pod 副本为新的 Pod 副本,确保应用在更新过程中不会中断。

示例

以下是一个配置了滚动更新策略的 Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: nginximage: nginx:1.19strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1  # 更新过程中最多允许 1 个 Pod 不可用maxSurge: 1        # 更新过程中最多允许超出预期副本数 1 个 Pod

更新过程

  • Deployment 会先启动一个新的 Pod,然后终止一个旧的 Pod,逐步替换所有 Pod。

  • 通过 maxUnavailablemaxSurge,你可以控制更新的速度和可用性。


3. 回滚

如果更新过程中出现问题,Deployment 允许你回滚到之前的版本。

示例

假设你更新了 Deployment,但新版本的应用有问题,需要回滚到上一个版本。

回滚步骤

  1. 查看 Deployment 的更新历史:

    kubectl rollout history deployment/my-deployment

    输出示例:

    REVISION  CHANGE-CAUSE
    1         <none>
    2         Update image to nginx:1.19

  2. 回滚到上一个版本:

    kubectl rollout undo deployment/my-deployment

  3. 回滚到指定版本(例如回滚到 Revision 1):

    kubectl rollout undo deployment/my-deployment --to-revision=1


4. ReplicaSet 管理

Deployment 通过创建和管理 ReplicaSet 来实现 Pod 的副本管理。每次更新 Pod 模板时,Deployment 都会创建一个新的 ReplicaSet,并逐步将旧的 ReplicaSet 缩容。

示例

假设你有一个 Deployment,初始版本使用 nginx:1.18 镜像。

初始 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: nginximage: nginx:1.18

更新 Deployment
将镜像更新为 nginx:1.19 后,Deployment 会创建一个新的 ReplicaSet,并逐步将旧的 ReplicaSet 缩容。

查看 ReplicaSet

kubectl get replicaset

输出示例:

NAME                       DESIRED   CURRENT   READY   AGE
my-deployment-1234567890   3         3         3       5m   # 新的 ReplicaSet
my-deployment-9876543210   0         0         0       10m  # 旧的 ReplicaSet

5. 自动恢复

Deployment 会自动恢复意外终止的 Pod,以确保 Pod 副本数量始终符合预期。

示例

假设你有一个 Deployment,配置了 replicas: 3

手动删除一个 Pod

kubectl delete pod <pod-name>

Deployment 的行为

  • Deployment 会检测到 Pod 数量不足,并自动创建一个新的 Pod 来替换被删除的 Pod。


6. 扩展和缩容

Deployment 支持动态扩展和缩容。你可以通过修改 replicas 字段来调整 Pod 的副本数量。

示例

假设你有一个 Deployment,初始副本数为 3。

扩展副本数

  1. 修改 deployment.yaml 文件,将 replicas: 3 改为 replicas: 5

  2. 应用更新:

    kubectl apply -f deployment.yaml
  3. Deployment 会自动创建 2 个新的 Pod。

缩容副本数

  1. 修改 deployment.yaml 文件,将 replicas: 5 改为 replicas: 2

  2. 应用更新:

    kubectl apply -f deployment.yaml
  3. Deployment 会自动删除 3 个 Pod,只保留 2 个 Pod。

示例

以下是一个简单的 Deployment 定义示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-deployment
spec:replicas: 3selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginxstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1maxSurge: 1

在这个示例中:

  • replicas: 3 表示期望有 3 个 Pod 副本在运行。

  • selector 指定了 Deployment 管理的 Pod 的标签为 app: my-app

  • template 定义了 Pod 的规格,包括容器镜像 nginx

  • strategy 配置了滚动更新策略,maxUnavailable: 1 表示在更新过程中最多允许 1 个 Pod 不可用,maxSurge: 1 表示在更新过程中最多允许超出预期副本数 1 个 Pod。

相关文章:

k8s主要控制器简述(一)ReplicaSet与Deployment

目录 一、ReplicaSet 关键特性 示例 解释 支持的 Operator 二、Deployment 1. 声明式更新 示例 2. 滚动更新 示例 3. 回滚 示例 4. ReplicaSet 管理 示例 5. 自动恢复 示例 6. 扩展和缩容 示例 示例 一、ReplicaSet ReplicaSet 是 Kubernetes 中的一个核心控…...

Java中的消息中间件对比与解析:RocketMQ vs RabbitMQ

消息中间件&#xff08;Message Queue, MQ&#xff09;是分布式系统中实现异步通信、解耦服务和流量削峰的关键组件。在Java生态中&#xff0c;RocketMQ和RabbitMQ是两个广泛应用的消息队列系统&#xff0c;但它们在设计理念、功能特性和适用场景上存在显著差异。本文将从核心功…...

Android14 Log.isLoggable判断的分析

Android14 Log.isLoggable判断的分析 文章目录 Android14 Log.isLoggable判断的分析一、前言二、答案和分析1、Log.isLoggable 设置成true2、Log.isLoggable 分析&#xff08;1&#xff09;Log.java&#xff08;2&#xff09;android_util_Log.cpp&#xff08;3&#xff09;pro…...

Mac:JMeter 下载+安装+环境配置(图文详细讲解)

&#x1f4cc; 下载JMeter 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi &#x1f4cc; 无需安装 Apache官网下载 JMeter 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目…...

Python IP解析器 ip2region使用

说明&#xff1a;最近需要在python项目内使用IP定位所在城市的需求&#xff0c;没有采用向外部ISP服务商API请求获取信息的方案&#xff0c;则翻了翻&#xff0c;在搞Java时很多的方案&#xff0c;在Python端反而可选择范围很小。 # 示例查询 ips ["106.38.188.214"…...

labview与西门子1500plc进行S7通讯(仿真效果)

环境&#xff1a; 1.博图V16 2.S7-PLCSIM Advanced V3.0 3.labview2020 4.HslCommunication的dll文件 运行效果图 通过使用HslCommunication的库文件来对西门子plc进行通讯 labview代码 代码打包 通过网盘分享的文件&#xff1a;labview进行s7通讯测试.rar 链接: https:/…...

Oracle 公布 Java 的五大新功能

Java 增强提案包括语言增强和性能优化&#xff0c;从 JDK 25 中的稳定值 API 开始。 随着JDK&#xff08;Java 开发工具包&#xff09;24刚刚全面上市&#xff0c;Oracle 提前透露了不久的将来即将推出的 Java 功能&#xff0c;包括增强原始装箱到空限制值类类型。 3 月 18 日…...

台式机电脑组装---电脑机箱与主板接线

台式机电脑组装—电脑机箱与主板接线 1、机箱连接主板的跳线一般主要有USB 2.0、USB 3.0、前置音频接口(HD_AUDIO)以及POWER SW、RESET SW、POWER LED、HDD LED四个主板跳线&#xff0c;这些跳线分别的含义如下。 RESET SW&#xff1a;机箱重启按键&#xff1b;注&#xff1a…...

ubuntu高并发内核参数调优 - (压测客户端调优)

业务上要求集群提供10w并发&#xff0c;10w并发听上去不是很难&#xff0c;但10w并发持续1小时呢 在业务上线之前还需要我们自己对业务进行压测&#xff0c;俗称benchmark。 压测的服务器也是需要进行性能调优的&#xff0c;以下列出调优前后的参数对比&#xff0c;更直观的分析…...

动作捕捉手套如何让虚拟现实人机交互 “触手可及”?

在虚拟与现实逐渐交融的当下&#xff0c;动作捕捉技术正以前所未有的速度革新着多个领域。 动作捕捉技术&#xff0c;简称“动捕”&#xff0c;已经从早期的影视特效制作&#xff0c;逐步拓展到游戏开发、虚拟现实、机器人控制等多个领域。 而mHandPrO数据手套作为这一领域的…...

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…...

数据库:一文掌握 MongoDB 的各种指令(MongoDB指令备忘)

文章目录 入门连接 MongoDB Shell显示数据库切换数据库显示集合运行 JavaScript 文件 CRUD创建寻找文件使用运算符查找文档读取更新删除 数据库和集合Drop创建集合其他采集功能 索引列表索引创建索引删除索引隐藏/取消隐藏索引 方便的命令 其它改变流分片集群副本集 MongoDB 此…...

麒麟操作系统作为服务器,并且需要在浏览器上调试 MATLAB

在内网环境下&#xff0c;使用麒麟操作系统作为服务器&#xff0c;并且需要在浏览器上调试 MATLAB 程序&#xff0c;这确实复杂&#xff0c;但仍然有可行的解决方案。麒麟操作系统是国产化的 Linux 发行版&#xff08;如基于 Ubuntu Kylin 或银河麒麟&#xff09;&#xff0c;因…...

给管理商场消防安全搭建消防安全培训小程序全过程

一、需求沟通 “我是管理商场消防安全的嘛&#xff0c;做这个的作用呢&#xff0c;1是商场的所有商户员工可以看平面或者视频随时自学&#xff0c; 2是我们定期培训必修课程、考试&#xff0c;这个需要留存他们的手签字的签到表确认我们讲给他们听了&#xff08;免责很重要&am…...

Flutter:页面滚动,导航栏背景颜色过渡动画

记录&#xff1a;导航默认透明&#xff0c;页面发生滚动后&#xff0c;导航背景色由0-1&#xff0c;过渡到白色背景。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:redo…...

VSCode + CMake

参考文献&#xff1a; 如何用 GCC, CMake 和 Make 编译C/C代码Windows 上的 Linux 子系统&#xff1a;WSLWSL&#xff1a;桌面 UI 远程连接 RDP 配置 VScode 文章目录 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 编写如下的 CmakeLists.t…...

Docker进阶篇1:什么是Docker数据卷?为什么需要Docker数据卷?Docker数据卷3种类型介绍

大家好我是木木&#xff0c;在当今快速发展的云计算与云原生时代&#xff0c;容器化技术蓬勃兴起&#xff0c;Docker 作为实现容器化的主流工具之一&#xff0c;为开发者和运维人员带来了极大的便捷 。下面我们一起开始进阶第1篇&#xff1a;什么是Docker数据卷&#xff1f;为什…...

(2025|ICLR|华南理工,任务对齐,缓解灾难性遗忘,底层模型冻结和训练早停)语言模型持续学习中的虚假遗忘

Spurious Forgetting in Continual Learning of Language Models 目录 1. 引言 2. 动机&#xff1a;关于虚假遗忘的初步实验 3. 深入探讨虚假遗忘 3.1 受控实验设置 3.2 从性能角度分析 3.3 从损失景观角度分析 3.4 从模型权重角度分析 3.5 从特征角度分析 3.6 结论 …...

从两指到三指:Robotiq机器人自适应夹持器技术解析

工业自动化离不开高效工具的支持。Robotiq机器人工具凭借其模块化设计和智能化编程技术&#xff0c;提升了设备的灵活性和操作效率。Robotiq机器人工具精准的传感器和自适应夹持器技术&#xff0c;能够满足多样化的应用需求&#xff0c;为制造业、物流和科研等领域提供可靠的解…...

【css酷炫效果】纯CSS实现悬浮弹性按钮

【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492020 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚看到csdn出活动了&…...

力扣222. 完全二叉树的节点个数(Java实现)

222. 完全二叉树的节点个数 1. 思路 这个题最简单的做法就是暴力遍历&#xff0c;时间复杂度为O(n)。 我们现在用低于O(n)的做法解决问题。 对于一棵满二叉树&#xff0c;它的节点数 2 h - 1 (h 是指树一共有多少层) 头节点不断遍历左孩子直至为null&#xff0c;得到树高…...

MySQL函数大全(持续更新)

MySQL常用函数 一、字符串函数 函数功能 CONCAT(s1, s2, ...) 拼接字符串 CONCAT_WS(sep, s1, s2, ...) 指定分隔符拼接字符串 SUBSTRING(str, start, length) 截取字符串 LEFT(str, length) 从左边截取指定长度字符串 RIGHT(str, length) 从右边截取指定长度字符串 LENGTH(s…...

Django系列教程(13)——Cookie和Session应用场景及案例

目录 什么是cookie&#xff0c;cookie的应用场景及缺点 Django中如何使用cookie Cookie使用示例 什么是session及session的工作原理 Django中如何使用会话session Session使用示例 小结 HTTP协议本身是”无状态”的&#xff0c;在一次请求和下一次请求之间没有任何状态保…...

element-ui pagination 组件源码分享

pagination 分页组件源码分享&#xff0c;主要从以下三个方面&#xff1a; 1、pagination 组件页面结构。 2、pagination 组件属性。 3、pagination 组件方法。 一、组件页面结构。 二、组件属性。 2.1 small 是否使用小型分页样式&#xff0c;类型为 boolean&#xff0c;…...

【css酷炫效果】纯CSS实现火焰文字特效

【css酷炫效果】纯CSS实现火焰文字特效 缘创作背景html结构css样式完整代码基础版进阶版(冰霜版) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492005 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚…...

【java面型对象进阶】------继承实例

继承结构下的标准Javabean 代码如下&#xff1a; package demo10;//定义员工父类 public class Employee {private String id;private String name;private double salary;//构造方法public Employee(){}public Employee(String id,String name,double salary){this.idid;thi…...

Oracle 19c 子分区表索引测试

一、建表语句放在最后&#xff0c;方便查看 二、创建各类索引 --创建本地的主键约束&#xff0c;但必须加上分区键、子分区键MT_O_CODE,M_YMD alter table MS_DMG.A_RED drop constraint MGR_PK_AREAD ; alter table MS_DMG.A_RED add constraint MGR_PK_AREAD primary key …...

【数据分享】1999—2023年地级市固定资产投资和对外经济贸易数据(Shp/Excel格式)

在之前的文章中&#xff0c;我们分享过基于2000-2024年《中国城市统计年鉴》整理的1999-2023年地级市的人口相关数据、染物排放和环境治理相关数据、房地产投资情况和商品房销售面积相关指标数据、社会消费品零售总额和年末金融机构存贷款余额、各类用地面积、地方一般公共预算…...

Spring Boot 与 Couchbase 整合教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 与 Couchbase 整合教程 环境要求 JDK 8Spring Boot 2.7.xCouchbase Server 7.xMaven/Gradle 步骤 1&#xff1a;创建Spring Boot项目 使用 st…...

数据结构——串、数组和广义表

串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1​a2​...an​(n≥0) 其中&#xff0c;S是串名&#xff0c;单引号括起来的字符序列是串的值&#xff0c; a i a_i a…...