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。

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

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

相关文章

python中redis操作整理

下载redis命令 pip install redis 连接redis import redis # host是redis主机&#xff0c;需要redis服务端和客户端都起着 redis默认端口是6379 pool redis.ConnectionPool(hostlocalhost, port6379,decode_responsesTrue) r redis.Redis(connection_poolpool)操作字符串 …

自然语言处理入门4——RNN

一般来说&#xff0c;提到自然语言处理&#xff0c;我们都会涉及到循环神经网络&#xff08;RNN&#xff09;&#xff0c;这是因为自然语言可以被看作是一个时间序列&#xff0c;这个时间序列中的元素是一个个的token。传统的前馈神经网络结构简单&#xff0c;但是不能很好的处…

数据结构之链表(双链表)

目录 一、双向带头循环链表 概念 二、哨兵位的头节点 优点&#xff1a; 头节点的初始化 三、带头双向链表的实现 1.双链表的销毁 2.双链表的打印 3.双链表的尾插和头插 尾插&#xff1a; 头插&#xff1a; 4.双链表的尾删和头删 尾删&#xff1a; 头删&#xff1a; …

ASP3605同步降压调节器——满足汽车电子严苛要求的电源芯片方案

ASP3605高效同步降压调节器&#xff0c;通过AEC-Q100 Grade1认证&#xff0c;输入电压4V至15V&#xff0c;输出电流5A&#xff0c;峰值效率94%。车规级型号ASP3605A3U支持-40C至125C工作温度&#xff0c;适用于ADAS、车载信息娱乐系统等场景。 面向汽车电子的核心功能设计 1. …

vue3+Ts+elementPlus二次封装Table分页表格,表格内展示图片、switch开关、支持

目录 一.项目文件结构 二.实现代码 1.子组件&#xff08;表格组件&#xff09; 2.父组件&#xff08;使用表格&#xff09; 一.项目文件结构 1.表格组件&#xff08;子组件&#xff09;位置 2.使用表格组件的页面文件&#xff08;父组件&#xff09;位置 3.演示图片位置 ele…

[特殊字符]1.2.1 新型基础设施建设

&#x1f680; 新型基础设施建设全解析 &#x1f31f; 核心概念与定义 维度详细内容定义以新发展理念为引领&#xff0c;以技术创新为驱动&#xff0c;以信息网络为基础&#xff0c;提供数字转型、智能升级、融合创新服务的基础设施体系。提出背景2018年中央经济工作会议首次提…

SQL Server数据库慢SQL调优

SQL Server中慢SQL会显著降低系统性能并引发级联效应。首先&#xff0c;用户直接体验响应时间延长&#xff0c;核心业务操作&#xff08;如交易处理、报表生成&#xff09;效率下降&#xff0c;导致客户满意度降低甚至业务中断。其次&#xff0c;资源利用率失衡&#xff0c;CPU…

【安全运营】安全运营关于告警降噪的一些梳理

目录 前言一、智能技术层面1、机器学习和 AI 模型训练2、攻击成功判定 二、多源关联分析1、多源设备关联&#xff08;跨设备日志整合&#xff09;2、上下文信息增强 三、业务白名单和策略优化1、动态白名单机制2、阈值和规则调整 四、自动化和流程化1、告警归并与去重2、同类型…

逆向中常见的加密算法识别

1、base64及换表 base64主要是将输入的每3字节&#xff08;共24bit&#xff09;按照每六比特分成一组&#xff0c;变成4个小于64的索引值&#xff0c;然后通过一个索引表得到4个可见的字符。 索引表为一个64字节的字符串&#xff0c;如果在代码中发现引用了这个索引表“ABCDEF…

《UNIX网络编程卷1:套接字联网API》第2章 传输层:TCP、UDP和SCTP

《UNIX网络编程卷1&#xff1a;套接字联网API》第2章 传输层&#xff1a;TCP、UDP和SCTP 2.1 传输层的核心作用与协议选型 传输层是网络协议栈中承上启下的核心层&#xff0c;直接决定应用的通信质量。其主要职责包括&#xff1a; 端到端通信&#xff1a;屏蔽底层网络细节&am…

Eclipse 创建 Java 类

Eclipse 创建 Java 类 引言 Eclipse 是一款功能强大的集成开发环境(IDE),被广泛用于 Java 开发。本文将详细介绍如何在 Eclipse 中创建 Java 类,包括配置开发环境、创建新项目、添加类以及编写类代码等步骤。 配置 Eclipse 开发环境 1. 安装 Eclipse 首先,您需要在您…

汽车安全确认等级-中国等保

1、概念解析 网络安全保证等级&#xff08;Cybersecurity Assurance Level&#xff09;通常指在不同标准或框架下&#xff0c;根据系统或数据的敏感性、重要性以及潜在风险划分的等级&#xff0c;用于指导组织采取相应的安全防护措施。以下是几个常见的网络安全保证等级体系及…

蓝桥杯练习day2:执行操作后的变化量

题意 存在一种仅支持 4 种操作和 1 个变量 X 的编程语言&#xff1a; X 和 X 使变量 X 的值 加 1 –X 和 X-- 使变量 X 的值 减 1 最初&#xff0c;X 的值是 0 给你一个字符串数组 operations &#xff0c;这是由操作组成的一个列表&#xff0c;返回执行所有操作后&#xff…

【机器学习chp14 — 2】生成式模型—变分自编码器VAE(超详细分析,易于理解,推导严谨,一文就够了)

目录 二、变分自编码器 VAE 1、自编码器 AE &#xff08;1&#xff09;自编码器的基本结构与目标 1.1 编码器-解码器结构 1.2 目标函数&#xff1a;重构误差最小化 &#xff08;2&#xff09;自编码器与 PCA 的对比 2.1 PCA 与线性降维 2.2 非线性映射的优势 &#xf…

Linux 一步部署DHCP服务

#!/bin/bash #脚本作者和日期 #author: PEI #date: 20250319 #检查root权限 if [ "$USER" ! "root" ]; then echo "错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;" exit 0 fi #防火墙与高级权限 systemctl stop firewa…

【RHCE】awk文本处理

目录 基本介绍 命令格式 awk基本使用 命令行读取程序脚本 数据字段变量 脚本中使用多个命令 文件中读取程序 处理数据前运行脚本&#xff08;BEGIN&#xff09; 处理数据后运行脚本&#xff08;END&#xff09; awk高级用法 变量 内建变量 自定义变量 数组 定义…

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 与 Teleport 原理深度剖析 一、Teleport&#xff1a;突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

工业界处理 Atomic 操作的优化策略

在产业界&#xff0c;处理 atomic 操作 时&#xff0c;通常会根据具体情境选择不同的策略&#xff0c;主要取决于以下三个因素&#xff1a; 内存一致性需求&#xff1a;是否需要确保 所有线程&#xff08;threads&#xff09; 都能看到最新的变量值。性能需求&#xff1a;是否…

Python功能完美的宝库——内置的强大“武器库”builtins

builtins模块包含了Python大量的内置对象&#xff08;函数、异常和类型等&#xff09;&#xff0c;她是Python的内置武器库&#xff0c;堪称功能完美的宝库。 笔记模板由python脚本于2025-03-19 08:16:27创建&#xff0c;本篇笔记适合喜欢探究python的coder翻阅。 【学习的细节…

三分钟掌握视频分辨率修改 | 在 Rust 中优雅地使用 FFmpeg

前言 在视频处理领域&#xff0c;调整视频分辨率是一个绕不过去的需求。比如&#xff0c;你可能需要将一段视频适配到手机、平板或大屏电视上&#xff0c;或者为了节省存储空间和网络带宽而压缩视频尺寸。然而&#xff0c;传统的FFmpeg命令行工具虽然功能强大&#xff0c;但复…