k8s学习之路 | k8s 工作负载 ReplicaSet

news2025/8/6 13:13:44

文章目录

  • 1. ReplicaSet 基础概念
    • 1.1 RS 是什么?
    • 1.2 RS 工作原理
    • 1.3 什么时候使用 RS
    • 1.4 RS 示例
    • 1.5 非模板 Pod 的获得
    • 1.6 编写 RS
    • 1.7 使用 RS
    • 1.8 RS 替代方案
  • 2. ReplicaSet 与 ReplicationController
    • 2.1 关于 RS、RC
    • 2.2 两者的选择器区别
    • 2.3 总结

1. ReplicaSet 基础概念

1.1 RS 是什么?

ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合

  • 保证给定数量、完全相同的 Pod 的可用性

打一个比方

我们以前进行 Deployment 部署的时候,存在这个字段信息:

  replicas: 5  ## 5个副本
  selector:
    matchLabels:
      app: nginx

上面就意味着我们要部署的副本数是5

1.2 RS 工作原理

通过以下字段来进行一个定义:

  • 用来识别可获取的 Pod 的集合的选择算符,这个选择算符是可以写复杂表达式的
  • 用来标明应用维护的副本个数的数值:比如 replicas: 5
  • 用来指定应该创建新 Pod 的模板

每个 ReplicaSet 都通过根据需要创建和删除 Pod 以使得副本个数达到期望值

1.3 什么时候使用 RS

ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能。 因此,建议使用 Deployment 而不是直接使用 ReplicaSet, 除非你需要自定义更新业务流程或根本不需要更新。

1.4 RS 示例

怎么写还是直接使用 kubectl explain rs

这是一个测试用例

###rs-demo.yaml
apiVersion: apps/v1
kind: ReplicaSet  ##资源类型
metadata:  ## 元数据信息
  name: nginx
  labels:
    app: nginx
    tier: frontend
spec:  ## RS期望状态
  replicas: 3  ## 副本数
  selector:
    matchLabels:  ##标签选择算符
      app: nginx
  template:  ##pod模块
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

启动测试

image-20230306203002916

一些便捷的查询

##当前被部署的 ReplicaSet
kubectl get rs

##查看 ReplicaSet 的状态
kubectl describe rs nginx

##查看Pod的属主引用(信息被设置在 metadata 的 ownerReferences 字段中)
kubectl get pods nginx-klt65  -o yaml

1.5 非模板 Pod 的获得

RS 也不会局限于拥有在其模板(.spec.template)设置的 Pod,它也可以管理创建的裸 Pod

我先创建了一个 rs

apiVersion: apps/v1
kind: ReplicaSet  ##资源类型
metadata:  ## 元数据信息
  name: nginx
  labels:
    tier: frontend
spec:  ## RS期望状态
  replicas: 5  ## 副本数
  selector:
    matchLabels:  ##标签选择算符
      app: nginx
  template:  ##pod模块
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: pod1
        image: nginx

image-20230306204539740

我这里运行了一个裸的 pod

###pod1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod
  labels:
    app: nginx
spec:
  containers:
  - name: pod
    image: php:5-apache

我们查看一下状态

image-20230306205922485

image-20230306210011677

总结如下:

  • 上面的 Pod,虽然没有控制器,但是标签与 RS 的选择算符匹配,它会立即被 RS 获取
  • 新的 PodRS 获取,并立即被 RS 终止,因为它的存在会使得 RS 中超过期望值

如果先创建 Pod 再创建 RS 观察下

[root@k8s-01 k8s-yaml]# kubectl apply -f pod1.yaml
pod/pod created
[root@k8s-01 k8s-yaml]# kubectl apply -f  rs-demo.yaml
replicaset.apps/nginx created
[root@k8s-01 k8s-yaml]#

image-20230306211410456

image-20230306211709089

总结如下:

  • RS 已经获得了该 Pod,并仅根据其规约创建新的 Pod, 直到新的 Pod 和原来的 Pod 的总数达到其预期个数。
  • 采用这种方式,一个 RS 中可以包含异质的 Pod 集合

1.6 编写 RS

我们一般不会在实际工作直接编写 RS 资源,而是编写 Deploment 资源来替代 RS ,但是实际副本数控制依然是 RS

编写清单参考:

https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/replicaset/#how-a-replicaset-works

1.7 使用 RS

删除 RS 和 其 Pod

##删除rs和pod
kubectl delete -f 

image-20230306212800729

只是删除 RS

##只删除RS
kubectl delete -f  rs-demo.yaml --cascade=orphan

image-20230306212928936

一旦删除了原来的 ReplicaSet,就可以创建一个新的来替换它。 由于新旧 ReplicaSet 的 .spec.selector 是相同的,新的 ReplicaSet 将接管老的 Pod。 但是,它不会努力使现有的 Pod 与新的、不同的 Pod 模板匹配。 若想要以可控的方式更新 Pod 的规约,可以使用 Deployment 资源,因为 ReplicaSet 并不直接支持滚动更新。

从 RS 中隔离 Pod

可以通过改变标签来从 ReplicaSet 中移除 Pod。 这种技术可以用来从服务中去除 Pod,以便进行排错、数据恢复等。 以这种方式移除的 Pod 将被自动替换(假设副本的数量没有改变)。

扩缩 RS

通过更新 .spec.replicas 字段,ReplicaSet 可以被轻松地进行扩缩。ReplicaSet 控制器能确保匹配标签选择器的数量的 Pod 是可用的和可操作的。

在缩的时候,一般性算法:

  1. 首先选择剔除悬决(Pending,且不可调度)的各个 Pod
  2. 如果设置了 controller.kubernetes.io/pod-deletion-cost 注解,则注解值较小的优先被裁减掉
  3. 所处节点上副本个数较多的 Pod 优先于所处节点上副本较少者
  4. 如果 Pod 的创建时间不同,最近创建的 Pod 优先于早前创建的 Pod 被裁减

**RS 可被用于 HPA **

1.8 RS 替代方案

上面已经说过很多次了,我们一般不直接使用 RS,而是推荐使用 Deploy

Deployment 是一个可以拥有 ReplicaSet 并使用声明式方式在服务器端完成对 Pod 滚动更新的对象。 尽管 ReplicaSet 可以独立使用,目前它们的主要用途是提供给 Deployment 作为编排 Pod 创建、删除和更新的一种机制。当使用 Deployment 时,你不必关心如何管理它所创建的 ReplicaSet,Deployment 拥有并管理其 ReplicaSet。 因此,建议在需要 ReplicaSet 时使用 Deployment

2. ReplicaSet 与 ReplicationController

2.1 关于 RS、RC

RC(ReplicationController):副本控制器

RS(ReplicaSet):副本集

RC:老版

RS:新版

ReplicaSet 是 ReplicationController 的后继者。二者目的相同且行为类似,只是 ReplicationController 不支持标签用户指南中讨论的基于集合的选择算符需求。 因此,相比于 ReplicationController,应优先考虑 ReplicaSet

2.2 两者的选择器区别

对于RS

kubectl explain rs.spec.selector

image-20230306214654717

  • matchLabels:匹配标签
  • matchExpressions:匹配表达式

kubectl explain rs.spec.selector.matchExpressions

image-20230306214808648

  • 匹配复杂的表达式的场景来说
    • 我现在匹配了一个key-value形式为“app=nginx”
      • 如果 operator 值为 In:只要 Pod 标签的值有 nginx,就会被匹配
      • 如果 operator 值为 NotIn:只要 Pod 标签的值不是 nginx,就会被匹配
      • 如果 operator 值为 Exists:只要 Pod 标签能匹配到,不用管值多少,就会被匹配
      • 如果 operator 值为 DoesNotExist:只要 Pod 标签没有匹配到,不管值多少,就会被匹配

对于RC

kubectl explain rc.spec.selector

image-20230306215729713

相对就单一了撒

2.3 总结

虽然 RS 强大,但是我们也不直接写 RS;而是使用更多特性的 Deployment,Deployment 会自动产生 RS

image-20230306220059600

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

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

相关文章

【三维几何学习】使用VTK对网格输入特征进行可视化

使用VTK对网格输入特征进行可视化引言一、全部代码二、可视化引言 使用python调用VTK库对网格的输入特征进行可视化,方便后续实验与分析 上图可视化的输入特征是热核特征HKS的第一个通道,也可对其他输入进行可视化数据集可参考1:三角网格(Triangular Me…

网上鲜花交易平台,可运行

文章目录项目介绍一、项目功能介绍1、用户模块主要功能包括:2、商家模块主要功能包括:3、管理员模块主要功能包括:二、部分页面展示1、用户模块部分功能页面展示2、商家模块部分功能页面展示3、管理员模块部分功能页面展示三、部分源码四、底…

LCMXO3L-640E-5MG121I【FPGA】LCMXO3L-640E-6MG121I采用65nm非易失性低功耗工艺设计

LCMXO3L-640E-5MG121I【FPGA】LCMXO3L-640E-6MG121I采用65nm非易失性低功耗工艺设计MachXO3设备系列是一个超低密度系列,支持最先进的可编程桥接和IO扩展。它具有突破性的IO密度和最低的每IO成本。设备IO功能集成了对最新行业标准IO的支持。121CSFBGA(明…

plg(Loki+Promtail+Grafana)监控nginx日志、messages日志监控平台

登录官网:loki官网Like Prometheus, but for logs. Contribute to grafana/loki development by creating an account on GitHub.https://github.com/grafana/loki/releases/ loki安装 ----root用户操作 ###创建用户 useradd loki passwd loki###创建安装目录 mkd…

蒙牛联合泛微采知连,实现研发知识管理数智化

蒙牛1999年成立于内蒙古自治区,总部位于呼和浩特,是全球乳业七强。蒙牛常温事业部坚持产品的创新研发和数智化转型,每年持续、稳定的新品推出,让业务快速增长、规模持续扩大。 (图片素材来自蒙牛官网) 构建…

基于单片机的波形发生器设计

单片机可以用来设计各种类型的波形发生器,下面是一种基于单片机的波形发生器设计方案。所需材料:单片机:可以选择常见的Atmel AVR单片机,如ATmega328P等。调制器:可以使用AD9833或AD9851等常用的调制器。时钟&#xff…

部署安装Nginx服务实例

其他服务: 搭建zabbix4.0监控服务实例 普罗米修斯监控mysql数据库实战 Linux安装MySQL数据库步骤 一. Nginx概念介绍 1.介绍Nginx程序 Nginx (engine x) 是一款开源且高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。主要特点是占用…

ElasticSearch - 分布式文档索引、搜索、更新和删除文档的过程

文章目录1. 分布式文档存储1. 路由一个文档到一个分片中2. 主分片和副本分片如何交互3. 新建、索引和删除文档4. 取回一个文档5. 局部更新文档2. ElasticSearch相关问题1. 路由计算方式?2. 分片控制3. 分布式文档写入(索引)的过程?4. 分布式文档搜索的过…

自动化实战以及自动化性能测试

web自动化测试实战编写web自动化测试用例;创建自动化项目,根据用例来实现脚本无头模式使用selenium4自动化测试工具和junit5单元测试框架结合,如何实现的,以及有什么两点使用了junit5中提供的注解;避免生成过多的对象&…

轻量简单的团队协作工具有哪些?远程办公必备软件排行榜

前段时间的疫情不断反复,让不少企业和团队都开启了居家办公,无论是线上协作还是团队会议,都要使用大量的办公远程软件,因为突如其来的场景大转变,所以无形中也给大家增加了不少烦恼。 经历过了就有经验了,…

Docker安装Jenkins练习纪录一

Docker安装Jenkins练习记录参考博客准备资源centos7下载vmware下载jdk8下载Maven 下载FinalShell下载开始练习一些小问题参考博客 https://blog.csdn.net/lzc2644481789/article/details/124888223 https://blog.csdn.net/qq_52423918/article/details/125169577 准备资源 cen…

2023年天津体育学院专升本专业课考试考生考前防疫及入场须知

天津体育学院2023年高职升本科专业考试考生考前须知 一、防疫要求 1.考生要强化自我健康“第一责任人”的意识和责任,自觉履行考前每日健康监测义务。须于考前7天(3月8日前)下载《天津体育学院2023年高职升本科专业考试考生健康安全承诺书》&…

【微信小程序开发全流程】篇章0:基于JavaScript开发的校园综合类微信小程序的概览

基于JavaScript开发的校园综合类微信小程序的概览 本文仅供学习,未经同意请勿转载 一些说明:上述项目来源于笔者我本科大三阶段2019年电子设计课程项目,在这个项目中,我主要是负责的部分有前端,前后端的对接&#xf…

深入理解机器学习——偏差(Bias)与方差(Variance)

分类目录:《深入理解机器学习》总目录 偏差(Bias)与方差(Variance)是解释学习算法泛化性能的一种重要工具。偏差方差分解试图对学习算法的期望泛化错误率进行拆解,我们知道,算法在不同训练集上学…

兴达易控Modbus转Profinet网关连接1200Profinet转modbus接三菱A800变频器案例

下面介绍A800 变频器通过兴达易控modbus转profinet网关,使1200plc无需编程实现Profinet转modbus协议转换,把modbus变频器轻松组网 网络拓扑如下图 打开博图组态加载GSD文件,modbus转profinet网关从站接口接入到1200PLC上 配置modbus转profine…

【MyBatis】篇二.MyBatis查询与特殊SQL

文章目录1、MyBatis获取参数值case1-单个字面量类型的参数case2-多个字面量类型的参数case3-map集合类型的参数case4-实体类类型的参数case5-使用Param注解命名参数总结2、MyBatis的各种查询功能case1-查询结果是一个实体类对象case2-查询结果是一个List集合case3-查询单个数据…

杂记——16.idea中导入maven项目

这篇文章我们来讲一下如何从Gitee上拉取项目,并将该项目导入到idea中 目录 1.拉取项目 2.idea导入项目 3.更改相关的配置 3.1更改maven仓库 3.2更改数据库的连接池 1.拉取项目 第一步:找到相关的项目地址 如图所示,在Gitee上找到相关的…

FPGA时序约束(二)利用Quartus18对Altera进行时序约束

系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 文章目录系列文章目录前言Quartus时序约束不进行时序约束的后果时序约束方法TimeQuest Timing Analyzer 工具来对工程添加约束。创建网表读取SDC文件创建时钟(Create Clock&#xff09…

八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令

layout: post title: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 description: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 tag: 八股总结 文章目录操作…

基础SQL语法及使用案例

通用SQL语法 SQL语句可以单行或多行书写,以分号结尾。SQL语句可以使用空格/缩进来增强语句的可读性。MySOL数据库的SQL语句不区分大小写,关键字建议使用大写。注释: 单行注释:--注释内容 或 #注释内容(MySQL特有) 多行注释&#…