k8s学习之路 | k8s 工作负载 ReplicaSet
文章目录
- 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: nginxlabels:app: nginxtier: frontend
spec: ## RS期望状态replicas: 3 ## 副本数selector:matchLabels: ##标签选择算符app: nginxtemplate: ##pod模块metadata:labels:app: nginxspec:containers:- name: nginximage: nginx
启动测试
一些便捷的查询
##当前被部署的 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: nginxlabels:tier: frontend
spec: ## RS期望状态replicas: 5 ## 副本数selector:matchLabels: ##标签选择算符app: nginxtemplate: ##pod模块metadata:labels:app: nginxspec:containers:- name: pod1image: nginx
我这里运行了一个裸的 pod
###pod1.yaml
apiVersion: v1
kind: Pod
metadata:name: podlabels:app: nginx
spec:containers:- name: podimage: php:5-apache
我们查看一下状态
总结如下:
- 上面的
Pod
,虽然没有控制器,但是标签与RS
的选择算符匹配,它会立即被RS
获取 - 新的
Pod
被RS
获取,并立即被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]#
总结如下:
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
只是删除 RS
##只删除RS
kubectl delete -f rs-demo.yaml --cascade=orphan
一旦删除了原来的 ReplicaSet,就可以创建一个新的来替换它。 由于新旧 ReplicaSet 的
.spec.selector
是相同的,新的 ReplicaSet 将接管老的 Pod。 但是,它不会努力使现有的 Pod 与新的、不同的 Pod 模板匹配。 若想要以可控的方式更新 Pod 的规约,可以使用 Deployment 资源,因为 ReplicaSet 并不直接支持滚动更新。
从 RS 中隔离 Pod
可以通过改变标签来从 ReplicaSet 中移除 Pod。 这种技术可以用来从服务中去除 Pod,以便进行排错、数据恢复等。 以这种方式移除的 Pod 将被自动替换(假设副本的数量没有改变)。
扩缩 RS
通过更新
.spec.replicas
字段,ReplicaSet 可以被轻松地进行扩缩。ReplicaSet 控制器能确保匹配标签选择器的数量的 Pod 是可用的和可操作的。
在缩的时候,一般性算法:
- 首先选择剔除悬决(Pending,且不可调度)的各个 Pod
- 如果设置了
controller.kubernetes.io/pod-deletion-cost
注解,则注解值较小的优先被裁减掉 - 所处节点上副本个数较多的 Pod 优先于所处节点上副本较少者
- 如果 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
- matchLabels:匹配标签
- matchExpressions:匹配表达式
kubectl explain rs.spec.selector.matchExpressions
- 匹配复杂的表达式的场景来说
- 我现在匹配了一个
key-value
形式为“app=nginx”- 如果
operator
值为 In:只要Pod
标签的值有 nginx,就会被匹配 - 如果
operator
值为 NotIn:只要Pod
标签的值不是 nginx,就会被匹配 - 如果
operator
值为 Exists:只要Pod
标签能匹配到,不用管值多少,就会被匹配 - 如果
operator
值为 DoesNotExist:只要Pod
标签没有匹配到,不管值多少,就会被匹配
- 如果
- 我现在匹配了一个
对于RC
kubectl explain rc.spec.selector
相对就单一了撒
2.3 总结
虽然 RS 强大,但是我们也不直接写 RS;而是使用更多特性的 Deployment,Deployment 会自动产生 RS
相关文章:
k8s学习之路 | k8s 工作负载 ReplicaSet
文章目录1. ReplicaSet 基础概念1.1 RS 是什么?1.2 RS 工作原理1.3 什么时候使用 RS1.4 RS 示例1.5 非模板 Pod 的获得1.6 编写 RS1.7 使用 RS1.8 RS 替代方案2. ReplicaSet 与 ReplicationController2.1 关于 RS、RC2.2 两者的选择器区别2.3 总结1. ReplicaSet 基础…...
python实现半色调技术图像转换
半色调技术 半色调技术是一种将灰度图像转换为黑白图像的技术。它是通过将灰度图像的像素值映射到黑白像素值上来实现的。 比如说,在一块只能显示纯黑或纯白的屏幕上,如何将一张灰度图显示出灰度的效果,这时就可以用半色调技术实现。 如下…...
c++面试技巧-基础篇
1.面试官:简述C语言的优缺点。 应聘者:C语言的优缺点如下。 • C语言的优点:C语言既保留了C语言的有效性、灵活性、便于移植等全部精华和特点,又添加了面向对象编程的支持,具有强大的编程功能,可方便地构…...
三八妇女节即将到来,跨境电商如何玩转节日营销?
随着国际妇女节的到来,跨境电商商家们都开始了为自己的店铺进行节日营销的准备。商家做节日营销的目的都是一样的,无非都是增加曝光率,拉动客流,增加营业额。但是每一个节日营销的形式是可以不一样的。今年有什么营销玩法呢&#…...
【Java学习笔记】10.条件语句 - if...else及switch case 语句
前言 本章介绍Java的条件语句 - if…else和switch case 语句。 Java 条件语句 - if…else Java 中的条件语句允许程序根据条件的不同执行不同的代码块。 一个 if 语句包含一个布尔表达式和一条或多条语句。 语法 if 语句的语法如下: if(布尔表达式) {//如果布…...
解析STM32启动过程
相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x…...
微信小程序开发自学笔记 —— 八、小程序基础库的更新迭代
小程序基础库的更新迭代 小程序基础库 小程序的运行环境是分成渲染层和逻辑层的,在渲染层可以用各类组件组建界面的元素,在逻辑层可以用各类API来处理各种逻辑,组件、API其实都是小程序基础库进行包装提供的,基础库的职责还要处…...
Mysql迁移Postgresql
目录原理环境准备操作系统(Centos7)Mysql客户端安装Psql客户端安装数据库用户空字符串处理成null导表脚本dbmysql2pgmysqlcopy测试在mysql中建表导表测试查看pg中的表原理 Mysql抽取:mysql命令重定向到操作系统文件,处理成csv文件; PG装载&a…...
关于信息安全认证CISP、PTE对比分析
CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师(以下简称PTE) 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心,政府背景给认证做背书,学员信息都在中国政府可控的机构手中; 如果想在政府、国…...
游戏场景编辑器和骨骼动画相关软件
游戏场景编辑器 一.Tiled(2D) Tiled 是帮助你开发游戏内容的 2D 地图编辑器。它的主要功能是可以编辑各种形式的瓦片地图,还支持通过用空图片这种强大的方式来标记额外信息给游戏使用。Tiled 关注的是总体灵活性,同时尽量保持直观性。 Tiled Map 不但…...
vue3常用的API
目录 1.ref函数 2.reactive函数 3.reactive对比ref 4.computed函数 5.watch函数 6.toRef 7..provide && inject 1.ref函数 作用: 定义一个响应式的数据 语法: const xxx ref(initValue) 创建一个包含响应式数据的引用对象(reference对象ÿ…...
Qt中使用
LIB库路径,include 头文件,运行的时候记得吧dll库带上,这基本就完成了。准备工作:Qt可以是傻瓜式的安装就行,GE的驱动里面有exe,直接点击安装即可,完了记得到安装路径把“.h”“.liib”和“.dll…...
controller-runtime搭建operator开发环境
目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式,而Manager可以用来管理Controller、Admission Webhook,包括访问资源对…...
FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持
目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利:工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案: 一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简…...
Django 之 CharField 和 TextField
CharField test_char models.CharField(max_length288)设置长度为 288 并不会报错,这取决于你的数据库后端,mysql char 类型长度为 255,django 里面设置超过 255 并不会有提示,个人感觉有点误导人,起码给个警告也行&…...
recyclerview 使用的坑
1.有不同的布局 12_GridLayoutManager setSpanSizeLookup()方法 - 简书 setSpanSizeLookup 这个方法要会 spanCount和 getSpanSize spanCount/getSpanSize() 才是这一项所占的宽度 2.均分 item布局要设置宽度为match_paraent 3.设置完了。发现高度不一样,…...
DBeaver连接mysql、oracle数据库
1. DBeaver连接mysql 1) 下载DBeaver https://dbeaver.io/download/,并安装 2) 新建数据库连接 3)选择mysql驱动程序 4)填写连接设置内容 5)点击 “编辑驱动设置”,并填写相关信息 6)选择本地…...
Kivy GridLayout 布局
Kivy GridLayout 是一种用于构建用户界面的布局类型,可以帮助我们快速创建具有固定列和行的网格布局。GridLayout 布局是可以适用于任意数量的行和列的布局,然后在这些行和列中放置 UI 元素。 Kivy 的 GridLayout 使用起来类似于 HTML 的表格,…...
Spark高手之路2—Spark安装配置
文章目录Spark 运行环境一、Local 模式1. 下载压缩包2.上传到服务器3. 解压4. 启动 Local 环境5. 命令行工具6. 退出本地模式7. 提交应用二、Standalone 模式1. 解压2. 修改配置文件1)进入解压缩后路径的 conf 目录,复制 workers.template 文件为 worker…...
Java中对象的比较
目录元素的比较基本类型的比较引用类型的比较1. 覆写基类的equals2. 基于Comparble接口类的比较3. 基于比较器比较三种方法对比元素的比较 基本类型的比较 这里就拿整型, 字符型, 布尔型 为例: public static void main(String[] args) {int a 10;int b 20;System.out.pri…...
Python编程训练题2
1.11 有 n 盏灯,编号 1~n(0<n<100)。第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的倍数的开关(其…...
Shifu基础功能:设备管理
设备管理 deviceshifu_configmap.yaml中的telemetries表示自动测量记录传导。Shifu通过telemetries中设置的方法,以指定时间向设备周期性地发送请求,来判断设备的连接情况。如果设备出现故障或者连接出现问题,edgeDevice的状态将发生改变&am…...
交互:可以执行命令行的框架才是好框架
上一节课,我们开始把框架向工业级迭代,重新规划了目录,这一节课将对框架做更大的改动,让框架支持命令行工具。 第三方命令行工具库 cobra obra 不仅仅能让我们快速构建一个命令行,它更大的优势是能更快地组织起有许多…...
eunomia-bpf 和 wasm-bpf 项目的 3 月进展
eunomia-bpf 项目是一个开源项目,旨在提供一组工具,用于在 Linux 内核中更方便地编写和运行 eBPF 程序。在过去一个月中,该项目取得了一些新的进展,以下是这些进展的概述。 首先,eunomia-bpf 动态加载库进行了一些重要…...
Spring框架核心功能手写实现
文章目录概要Spring启动以及扫描流程实现基础环境搭建扫描逻辑实现bean创建的简单实现依赖注入实现BeanNameAware回调实现初始化机制模拟实现BeanPostProcessor模拟实现AOP模拟实现概要 手写Spring启动以及扫描流程手写getBean流程手写Bean生命周期流程手写依赖注入流程手写Be…...
k8s-镜像构建Flink集群Native session
一.Flink安装包下载 wget https://dlcdn.apache.org/flink/flink-1.14.6/flink-1.14.6-bin-scala_2.12.tgz 二.构建基础镜像推送私服 docker pull apache/flink:1.14.6-scala_2.12 docker tag apache/flink:1.14.6-scala_2.12 172.25.152.2:30002/dmp/flink:...
在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)
本文搭建的 SonarQube 版本是 7.4.9-community,由于在官方文档中声明 7.9 版本之后就不再支持使用 MySQL 数据库。所以此次搭建使用的数据库是 PostgreSQL 11.4 版本。 一、部署 PostgreSQL 服务 1. 创建命名空间 将 PostgreSQL 和 SonarQube 放在同一个命名空间…...
从getBean()分析BeanFactory和ApplicationContext
本文说了哪些问题: BeanFactory 是啥ApplicationContext 是啥什么时候去实例化一个 bean, BeanFactory 和 ApplicationContext 实例化 bean 都是在什么时候 一个 Bean 什么时候被初始化 任何一个 Bean, 都是在 getBean () 的时候被初始化的.BeanFactory 需要字节手动调用 getb…...
详解Redis的主从同步原理
前言 Redis为了保证服务高可用,其中一种实现就是主从模式,即一个Redis服务端作为主节点,若干个Redis服务端作为主节点的从节点,从而实现即使某个服务端不可用时,也不会影响Redis服务的正常使用。本篇文章将对主从模式…...
前端项目上线后,浏览器缓存未刷新问题
文章目录问题背景一、解决办法二、实现原理关于缓存强缓存协商缓存刷新页面对浏览器的影响总结问题背景 前端页面开发测试完,要进行上线,某些页面上传更新到服务器之后,浏览器并没有更新,渲染的还是老页面。这是因为浏览器读了缓存…...
普通网站建设是什么/惠州疫情最新情况
/* 输入一堆数,如果是两个数并且个数相同就输出yes和这两个数 否则输出no */ #include <bits/stdc.h> using namespace std; const int maxn 1010; int num[maxn] {0}; int a[maxn] {0}; const int inf 0x3f3f3f3f; int main() {int n;int sum 0;int flag…...
静态网站模板/百度快速排名提升
双缝实验Double-slit experiment 假若光束是由经典粒子组成,将光束照射于两条相互平行的狭缝,则在探射屏应该会观察到两个单缝图样的总和。但实际并不是这样,如下图所示,在探射屏显示出一系列明亮条纹与暗淡条纹相间的图样。 这个…...
怎么做代刷网站/it教育培训机构
在 Windows 系统中,可以使用 shutil 库来实现文件复制。下面是一个例子: import shutil import ossrc_folder "C:\\A" dst_folder "D:\\B" rename_list []for filename in os.listdir(src_folder):if filename.endswith(".pdf"):sr…...
上海建智咨询培训网站/seo博客优化
简介 本节课需要实现的内容是使用纹理贴图来模拟文字效果。使用这种技术显示文字的好处在于程序的效果在任何机器上都是相同的。而我们前面讨论的显示文字的方法都是依赖于当前系统中所包含的字体,所以前面讨论的技术在不同的机器上有可能会有不同的显示效果。 使用…...
网站注册管理策划方案/艾滋病阻断药
一、连接查询[连表查询、多表查询]当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回mysql支持三种类型的连接查询,分别为:内连接查询(inner join)查询的结果为两个表匹配到的数据使用内连接&am…...
网站建设类电话销售/seo网络排名优化技巧
其实还是这个老问题: 记一次文件下载丢包填坑之旅 http://www.cnblogs.com/syjkfind/p/5281677.html 即使现在只有haproxy-nginx-磁盘文件 比较少的转发,但文件特别大,还是偶有文件不完整的问题。 从现象上看,浏览器响应是200没问…...