K8s之Replicaset控制器详解

news/2025/2/12 20:55:59/

文章目录

    • 一、ReplicaSet 控制器介绍
    • 二、ReplicaSet案例
      • 1、Pod副本扩缩容案例
      • 2、Pod更新版本案例

一、ReplicaSet 控制器介绍

官方中文参考文档:

ReplicaSet是k8s中一种资源对象,简写 rs用于管理Pod副本数量和健康状态,在spec.replicas 字段中可以定义Pod副本数量,ReplicaSet会始终保持Pod在指定数量,当发现Pod数量大于副本数量时,会移除多出的Pod,当发现Pod小于副本数量会自动创建Pod,使其始终维护在副本数量,此外,ReplicaSet还会监控Pod的健康状态,如果某个Pod出现故障,ReplicaSet会自动替换它

ReplicaSet特点如下:

  • 自动化管理:ReplicaSet可以自动地创建、删除和更新Pod副本,以确保指定数量的Pod副本一直在运行。
  • 健康检查:ReplicaSet会定期检查Pod的健康状态,并根据需要重启或替换不健康的Pod。
  • 水平扩展:通过增加或减少Pod副本的数量,可以实现应用程序的水平扩展,以满足不同的负载需求。
  • 选择器:ReplicaSet使用标签选择器来选择要管理的Pod副本。
  • 有状态管理:ReplicaSet可以管理有状态的应用程序,例如数据库,以确保数据的一致性和可用性。
  • 更新:不支持滚动更新,需要手动删除旧Pod实现更新

ReplicaSet常用字段解释:

apiVersion: apps/v1      # RS版本
kind: ReplicaSet         # 定义RS资源类型  
metadata:                # RS元数据name: nginx-replicaset # RS名称namespace: default     # RS命名空间labels:                # RS标签app: webenv: uat
spec: replicas: 3            # 关联Pod副本数量selector:              matchLabels:         # 关联具有app=web的Podapp: webtemplate:              # Pod模板metadata:            # Pod元数据namespace: default # Pod命名空间labels:            # Pod标签app: webenv: uatspec:containers:        # Pod定义容器- name: web-nginx  # 容器名称image: nginx     # 容器使用镜像imagePullPolicy: IfNotPresent  # 容器镜像下载策略ports:         - containerPort: 80            # 容器内端口

二、ReplicaSet案例

1、Pod副本扩缩容案例

通过修改 spec.replicas 值来进行动态扩容、缩容,使用 nginx镜像定义副本数量 3,并添加了一些必要的探测,如下:

cat replicaset.yaml ---
apiVersion: apps/v1     
kind: ReplicaSet 
metadata:                name: nginx-replicasetnamespace: default   labels:               app: web
spec: replicas: 3           selector:              matchLabels:       app: webtemplate:             metadata:            namespace: default labels:            app: webspec:containers:       - name: web-nginx image: nginx:1.18.0imagePullPolicy: IfNotPresent  ports:         - containerPort: 80 startupProbe:tcpSocket:port: 80livenessProbe:httpGet:path: /index.htmlport: 80readinessProbe:httpGet:path: /index.htmlport: 80

执行YAML文件:

kubectl apply -f replicaset.yaml 

查看Pod、RS状态,是否创建且正常:

kubectl get rs,pod -l app=web

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZNCdEd20-1685257135299)(D:\MD归档文档\IMG\image-20230528133211004.png)]

当我们删除Pod时,RS会自动为我们创建出来,RS会始终维护Pod数量为3 删除命令如下:

kubectl delete pod nginx-replicaset-7mh2r

动态扩容副本数量,更新副本数量为5:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AHacQTU-1685257135300)(D:\MD归档文档\IMG\image-20230528133458570.png)]

重新 apply 一下 YAML文件:

kubectl apply -f replicaset.yaml 

验证,Pod数量:

kubectl get pod -l app=web

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4AEtJpV-1685257135301)(D:\MD归档文档\IMG\image-20230528133646092.png)]

缩容也是同样操作,更改replicas数值重新apply一下即可,此处省略。

2、Pod更新版本案例

所需镜像下载地址

ReplicaSet,不支持动态更新,只能是通过删除旧Pod方式,案例演示如下:

使用 web:v1 镜像 创建ReplicaSet资源

cat replicaset.yaml 
---
apiVersion: apps/v1     
kind: ReplicaSet 
metadata:                name: nginx-replicasetnamespace: default   labels:               app: web
spec: replicas: 3          selector:              matchLabels:       app: webtemplate:             metadata:            namespace: default labels:            app: webspec:containers:       - name: web-nginx image: web:v1     # V1 镜像imagePullPolicy: IfNotPresent  ports:         - containerPort: 80 

执行文件:

kubectl apply -f replicaset.yaml
kubectl get pod -l app=web

查看PodIP地址,并访问:

kubectl describe pod nginx-replicaset-wht6q|grep IP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeRqOgj6-1685257135302)(D:\MD归档文档\IMG\image-20230528144500659.png)]

根据以上更新使用 web:v2 镜像:

编辑上面 YAML 文件 只更改镜像版本即可如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWGTenzq-1685257135302)(D:\MD归档文档\IMG\image-20230528144647385.png)]

执行文件:

kubectl apply -f replicaset.yaml
kubectl get pod -l app=web

注意,此时curl Pod返回内容依旧是 旧版Pod内容,需要手动删除旧Pod资源,RS会自动创建Pod,自动创建的Pod才会使用新的镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pXMdKw2n-1685257135302)(D:\MD归档文档\IMG\image-20230528145222569.png)]

删除Pod,根据自己当前环境pod名称进行删除:

kubectl delete pod nginx-replicaset-ff5pl nginx-replicaset-rvr9k nginx-replicaset-wht6q

删除后,RS会自动创建,查看新的Pod:

kubectl get pod -l app=web

访问Pod:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfXPHJsB-1685257135303)(D:\MD归档文档\IMG\image-20230528145620136.png)]


http://www.ppmy.cn/news/98252.html

相关文章

网络编程 lesson6 服务器模型和网络超时检测

目录 服务器模型介绍 网络编程服务器模型 循环服务器模型 并发服务器模型 1. 多线程服务器 2. 多进程服务器 3. 事件驱动服务器 网络超时检测 应用场景 设置超时检测的方式 1.利用函数参数设置 代码示例 2.利用socket属性设置 3.利用alarm定时器设置 代码示例 服…

ChatGPT实现仪表盘生成

仪表盘生成 Grafana是开源社区最流行的数据可视化软件,一定程度上也和 superset 一起被视为 tableau 等商业 BI 的开源替代品,很多IT 团队、科研团队,都会使用 Grafana 来做数据监控、挖掘分析。Grafana社区也有很多贡献者,在 gi…

cat监控本地docker部署

1介绍 CAT 简介 CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。CAT 作为服务端项目基础组件,提供了 Java, C/C, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(M…

教你手写一个链表

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 以单链表为例,涉及到: 获取链表第index个节点的数值在链表的最前面插入一个节点在链表的最后面插入一个节点在链表第index个节点前面插入一个…

java文件上传

文件上传过程可以分为以下几个步骤: 前端界面选择文件并发送至后端。后端接收文件数据并保存到服务器的临时位置。后端对文件进行处理(例如验证文件类型、大小等)。将文件保存到目标位置或上传至文件存储服务。返回上传结果给前端。 以下是…

day40_servlet

今日内容 零、 复习昨日 一、注解 二、改造项目 三、请求转发 四、重定向 零、 复习昨日 一、注解(Annotation) 注解,又称为注释.它是给程序看的注释. JDK1.5后才出现的,作用是为了提高开发效率的,如何做到?(一个注解可以简化很多很多代码…) 常见注解: Override 1.1 自定义注…

在Centos Stream 9上Docker的实操教程 - Docker的常用命令

在Centos Stream 9上Docker的实操教程 - Docker的常用命令 Docker启动类命令Docker镜像命令镜像列表 docker images镜像查找 docker search拉取镜像 docker pull删除镜像 docker rmi查看占用信息 docker system df容器创建新镜像 docker commit 容器命令启动容器 docker run查看…

如何使用Vuex来管理应用程序的状态?

嘿,你好啊!你想知道如何用Vuex来管理你的应用程序的状态吗?这听起来像是一个严肃的问题,但其实我们可以把它变得非常有趣! 首先,我们需要安装Vuex。你可以通过运行以下命令来安装Vuex: npm in…