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

news2025/3/20 23:28:46

目录

一、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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: 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: 3
  selector:
    matchExpressions:
      - key: app
        operator: In
        values:
          - my-app
          - my-backup-app
      - key: environment
        operator: NotIn
        values:
          - production
  template:
    metadata:
      labels:
        app: my-app
        environment: staging
    spec:
      containers:
      - name: my-container
        image: 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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: nginx
        image: 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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.19
  strategy:
    type: RollingUpdate
    rollingUpdate:
      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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: nginx
        image: 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: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: nginx
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1

在这个示例中:

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

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

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

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

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

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

相关文章

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…

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

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

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

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#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;得到树高…

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…

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

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

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

串、数组和广义表 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…