3、k8s工作负载-replicaset详解

2023-11-03 07:38

本文主要是介绍3、k8s工作负载-replicaset详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

k8s工作负载-replicaset详解

  • K8S 工作负载架构
  • ReplicaSet
    • ReplicaSet 的工作原理
    • 何时使用 ReplicaSet
    • RC/RS控制器
    • 示例
    • 删除rs
    • 自愈能力
    • 扩容能力

K8S 工作负载架构

在这里插入图片描述
从图中可以知道POD是k8s中最下的单位,ReplicaSet简称rs,是用于自动化部署使用,它是对pod自动化部署的定义,而deployment是对rs的更上一层抽象,也就是deployment是管理rs,而rs是管理pod的,rc的功能和rs差不多,现在基本上已经不使用了。

Pod: smallest K8s compute resource containing 1…containers
Pod:最小的K8s计算资源,包含1…个容器

init container: container executing startup tasks, like e.g.database migration
init container:执行启动任务的容器,例如数据库迁移

container: container with main or sidecar application
容器:主要或侧车应用的容器

Horizontal Pod autoscaler: scales the number of Pods based on various metrics
Horizontal Pod autoscaler:根据各种度量标准缩放Pod的数量

ReplicationController: predecessor of deployment, don’t use it anymore
ReplicationController:部署的前身,不要再使用它了

StatefulSet: creates Pods while handling the needs of stateful applications
StatefulSet:在处理有状态应用程序的需求时创建pod

Deployment: creates a ReplicaSet and takes care of rollouts and rollbacks
部署:创建复制集并负责卷展和回滚

ReplicaSet: creates the desired amount of Pod instances
ReplicaSet:创建所需数量的Pod实例

CronJob: creates Jobs based on a time schedule
CronJob:根据时间表创建作业

Job: creates short living Pods for one time executions
工作:为一次性执行创建短期生存Pods

DaemonSet: creates exactly one Pod per Node
守护程序集:每个节点只创建一个Pod

ReplicaSet

ReplicaSet 的工作原理

RepicaSet 是通过一组字段来定义的,包括一个用来识别可获得的 Pod 的集合的选择算符、一个用来标明应该维护的副本个数的数值、一个用来指定应该创建新 Pod 以满足副本个数条件时要使用的 Pod 模板等等。 每个 ReplicaSet 都通过根据需要创建和 删除 Pod 以使得副本个数达到期望值, 进而实现其存在价值。当 ReplicaSet 需要创建新的 Pod 时,会使用所提供的 Pod 模板。
ReplicaSet 通过 Pod 上的 metadata.ownerReferences 字段连接到附属 Pod,该字段给出当前对象的属主资源。 ReplicaSet 所获得的 Pod 都在其 ownerReferences 字段中包含了属主 ReplicaSet 的标识信息。正是通过这一连接,ReplicaSet 知道它所维护的 Pod 集合的状态, 并据此计划其操作行为。
ReplicaSet 使用其选择算符来辨识要获得的 Pod 集合。如果某个 Pod 没有 OwnerReference 或者其 OwnerReference 不是一个 控制器,且其匹配到 某 ReplicaSet 的选择算符,则该 Pod 立即被此 ReplicaSet 获得。

何时使用 ReplicaSet

ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能。 因此,我们建议使用 Deployment 而不是直接使用 ReplicaSet,除非 你需要自定义更新业务流程或根本不需要更新。
这实际上意味着,你可能永远不需要操作 ReplicaSet 对象:而是使用 Deployment,并在 spec 部分定义你的应用

RC/RS控制器

控制 Pod,使 Pod 拥有自愈,多副本,扩缩容的能力
RC 的定义包括如下几个部分:
(1) Pod 期待的副本数(replicas)
(2)用于筛选目标 Pod 的 Label Selector
(3)当 Pod 的副本数量小于预期数量时,用于创建新 Pod 的 Pod 模板(template)

示例

apiVersion: apps/v1
kind: ReplicaSet
metadata:name: frontendlabels:app: guestbooktier: nginx-rs
spec:# modify replicas according to your casereplicas: 3selector:matchLabels:tier: nginx-tttemplate:metadata:labels:tier: nginx-ttspec:containers:- name: nginx-rsimage: nginx:1.9

metadata.labels:表示得是RS中得label,定义了rs中得label,就是rs特有得label;
spec.selector.matchLabels:这个是RS选择pod容器得label,对应到下面得pod定义得label,要一样,否则是找不到对应得pod得,当然不同得pod最好不要将label设置为一样得。
spec.template.metadata.lables:这个是定义模板得容器标签,这个标签要和spec.selector.matchLabels对应上
spec.replicas:表示这个容器要启动多少个pod副本,这里设置的3个

我们把上面得yaml应用过后,查看结果:
在这里插入图片描述
列表中frontend就是刚刚应用的yaml,我们设置了3个副本,所以
DESIRED:表示期望的副本是3个
CURRENT:表示当前为3个
READY:表示准备好的有3个
我们查看容器的详细信息如下:
在这里插入图片描述上面的selector中的tier=nginx-tt就是yaml中定义的label选择器对应到下面的Containers中的pod 模板template中的label 是tier=nginx-tt,而labels中定义的两个label
tier=nginx-rs
app=guestbook
是rs中定义的两个label
我们通过刚刚定义的rs的label来筛选出rs

kubectl get rs -l tier=nginx-rs

在这里插入图片描述
我们刚刚还定义了pod的三个副本label都是nginx-tt,我们筛选一下:

kubectl get pod -l tier=nginx-tt

在这里插入图片描述

删除rs

kubectl delete rs frontend

自愈能力

我们这里删除rs中的pod
在这里插入图片描述
我们这里删除第一个frontend-dpdr9 pod容器观察下变化

kubectl delete pod frontend-dpdr9

在这里插入图片描述
可以看到我们删除了rs中的pod以后,rs有自愈功能,会自动再重启一个pod来完成自愈功能,在实际的场景中,经常会有pod挂掉,而rs会自动自愈,在另外的地方或者本节点自动启动一个pod来完成自愈

扩容能力

kubectl scale --replicas=5 rs frontend

自动扩容到5个了
还可以进行缩容,缩容到3个
在这里插入图片描述
变成了3个了,还可以进行自动伸缩,通过命令:

kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50

最大10个,最小3个,cpu的百分比是50

这篇关于3、k8s工作负载-replicaset详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/336621

相关文章

Python装饰器之类装饰器详解

《Python装饰器之类装饰器详解》本文将详细介绍Python中类装饰器的概念、使用方法以及应用场景,并通过一个综合详细的例子展示如何使用类装饰器,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. 引言2. 装饰器的基本概念2.1. 函数装饰器复习2.2 类装饰器的定义和使用3. 类装饰

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl