【05】Kubernets:资源清单(控制器 - ReplicaSet)
写在前面的话
从上一章节开始,我们一直在学习关于自主式 Pod 的资源清单编写, 但是自主式 Pod 存在着一个问题,就是和我们直接 docker run 运行 docker 容器一样。如果我们想以集群的形式并配合复杂的处理逻辑就不那么好用了。
针对这点,我们将 Pod 的处理交给了控制器。
关于控制器
再详细讲解控制器怎么使用之前,我们得知道控制器是啥,以及我们需要使用哪些。
在讲解 K8S 的 Master 组成的时候说过,Master 节点有个重要组件叫做 Controller Manager。
Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 组成,是 K8S 的核心。
Cloud controller 一般在配合云服务的时候再使用,所以不是我们关心得重点。
kube-controller-manager 由以下主要的控制器组成:
1. Replication Controller(已经废弃)
2. Replicaset
3. Deployment Controller
4. DaemonSet Controller
5. Job / CronJob Controller
6. Volume Controller
7. StatefulSet Controller
8. Node Controller
9. Service Controller
10. 等等...
常见控制器说明
Replication Controller:
保证了再特定时间内运行的副本数了,多退少补。并且不会去关注 pod 的状态,只要你被删除或者被终止,自动就把你替换掉。他就像一个进程管理器监管着多个节点的 pod。
该控制器只对 restartPolicy 配置为默认 Always 的生效,且控制器永远不会自己关闭。但我们更希望控制器是伴随着服务的生命周期创建删除,因为程序会更新。
ReplicaSet:
新一代的副本控制器,属于 Replication Controller 的升级版,区别在于新版本支持更为高级的 selector。
包含 3 个关键点:用户期望副本数,标签选择器,Pod 资源模板。
Deployment:
调度 ReplicaSet 实现我们的需求,官方也建议我们使用 Deployment 替代 ReplicaSet。例如:
使用 Deployment 来创建 ReplicaSet,ReplicaSet 会在后台启动相关的 Pod 并检测其状态。
当我们更新 Deployment 中定义的 Pod 状态时,会新建 ReplicaSet 并根据配置的策略,让 ReplicaSet 按照一定的规则来重建 Pod,实现切换。
StatefulSet:
主要用于解决有状态的服务的问题。后面会专门用到。
DaemonSet:
保证每个节点上都有运行一个副本,常用来作为集群日志收集,监控。
Replicaset Controller 资源清单
对于 Replicaset Controller 的资源清单,我们也可以像查看 Pod 一样查看:
kubectl explain rs
我们可以将 ReplicaSet 简写成为 rs,就像之前我们使用 service 简写成 svc 一样。
在 ReplicaSet 中,前面提到了 3 个关键点:副本数,标签选择器,Pod 资源模板。其结果如下表:
| rs | |||
|---|---|---|---|
| apiVersion | extensions/v1beta1 | ||
| kind | ReplicaSet | ||
| metadata | |||
| name | rs 的名称 | ||
| namespace | 所属命名空间 | ||
| labels | rs 的标签 | ||
| annotations | rs 的说明 | ||
| spec | |||
| replicas | 副本数 | ||
| selector | 标签选择器 | ||
| matchExpressions | KV 列表 | ||
| matchLabels | 标签选择键值对 | ||
| template | 模板 | ||
| metadata | Pod 的 metadata | ||
| spec | Pod 的 spec | ||
相当于在 Pod 外面嵌套了一层,用来定义 rs 的相关信息,如副本数,标签选择器。例如(红色部分就是 Pod 定义):
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: rs-demo
namespace: default
labels:
app: rs
release: stable
annotations:
ezops.cn/create-by: "Dylan"
spec:
replicas: 3
selector:
matchLabels:
app: erp
release: stable
template:
metadata:
name: rs-pod
namespace: default
labels:
app: erp
release: stable
annotations:
ezops.cn/create-by: "Dylan"
spec:
containers:
- name: rs-container
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
创建查看:
kubectl create -f rs-demo.yaml
kubectl get rs -o wide
结果如下:

对于 ReplicaSet 有几点需要我们注意:
1. 标签选择器中的标签在我们的 Pod 中必须有满足条件的。
2. ReplicaSet 创建完成后再去删除 Pod 会自动创建新的 Pod。
3. 修改集群中其他 Pod 的标签,改为满足 ReplicaSet 中标签选择器定义的需求。ReplicaSet 会干掉自己的 Pod,知道数量等于 replicas 定义的副本数。
4. 直接使用 edit 修改 ReplicaSet 的副本数量能够生效,但是修改镜像需要 Pod 在重启以后才能生效。
执行测试:
kubectl get pods
# 修改副本数为 5
kubectl edit rs rs-demo
# 再度查看
kubectl get pods
# 修改镜像版本为 v2
kubectl edit rs rs-demo
# 查看
kubectl get rs -o wide
# 访问查看
curl 10.1.2.4
结果如图:

小结
我这里准备将每个点都单独作为一个独立的章节记录,ReplicaSet 其实在之后的不会用到,但是我们需要理解原理,因为 Deployment 调度的其实就是 ReplicaSet。
【05】Kubernets:资源清单(控制器 - ReplicaSet)的更多相关文章
- 【07】Kubernets:资源清单(控制器 - DaemonSet)
写在前面的话 前面讲解了 Pod / ReplicaSet / Deployment 的资源清单,我们这里谈一下 DaemonSet 的资源清单. 之前说过,DaemonSet 控制器能够保证资源在每 ...
- 【06】Kubernets:资源清单(控制器 - Deployment)
写在前面的话 上一节主要简单的提了一下控制器都有哪些常用的,并且简单的功能是啥,最后一并提了 ReplicaSet 控制器. 但是 ReplicaSet 一般不需要我们直接配置,多以从本节开始,开始学 ...
- 【04】Kubernets:资源清单(pod)
写在前面的话 前面我们提到过,纯手敲 K8S 名称管理 K8S 服务只是作为我们了解 K8S 的一种方案,而我们最终管理 K8S 的方法还是通过接下来的资源清单的方式进行管理. 所以从本章节开始,将会 ...
- k8s学习笔记之四:资源清单定义入门
第一章.k8s中的资源 1.什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 2.在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet D ...
- Kubernetes学习之路(十二)之Pod控制器--ReplicaSet、Deployment
一.Pod控制器及其功用 Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源. pod控制器 ...
- (六)Kubernetes Pod控制器-ReplicaSet和Deployment和DaemonSet
Pod控制器相关知识 控制器的必要性 自主式Pod对象由调度器调度到目标工作节点后即由相应节点上的kubelet负责监控其容器的存活状态,容器主进程崩溃后,kubelet能够自动重启相应的容器.但对出 ...
- Kubernetes 学习5 kubernetes资源清单定义入门
一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...
- kubernetes 资源清单定义入门
k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...
- Kubernetes【K8S】(三):资源清单
K8S中的资源 K8S中所有的内容都抽象为资源,资源实例化之后叫做对象.一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件我们一般成为资源清单. 名称空间级资源 工作负载型资源( ...
随机推荐
- java--Proreties
Prorerties /* * Properties,内存与文件信息交互 * 表示了一个持久的属性集 * * 构造方法: * Properties() * * */ //简单使用 创建,添加,遍历, ...
- python类模拟电路实现
实现电路: 实现方法: class LogicGate(object): def __init__(self, n): self.name = n self.output = None def get ...
- 实战讲解XXE漏洞的利用与防御策略
现在许多不同的客户端技术都可以使用XMl向业务应用程序发送消息,为了使应用程序使用自定义的XML消息,应用程序必须先去解析XML文档,并且检查XML格式是否正确.当解析器允许XML外部实体解析时,就会 ...
- Android APP之WebView如何校验SSL证书
Android系统的碎片化很严重,并且手机日期不正确.手机根证书异常.com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点. ...
- vue中webpack的配置理解
当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面 (环境变量及其基本变量的配置) var path = require('path') ...
- 使用Visual Studio学习C语言
注明:安装的是社区版,只写大部分步骤,做笔记之用.详细还需要看B站教程,https://www.bilibili.com/video/av59608520 一.安装软件 1.安装Visual Stud ...
- 登录-退出,在T分钟实现BC次用户登录退出,单次登录-退出%90用户时间t,需要的并发用户(线程)
聚合报告%90响应时间:%90用户响应时小于该值 2种理解方式: 一. 1s可完成的用户1/t: T分钟完成的用户T *(1/t); BC次用户需要的线程数Thread= BC/(T*(1/t)) = ...
- c# 第18节 数组的操作
本节内容: 1:遍历数组 2:查找数组元素 3:数组排序 4:数组合并与拆分 5:数组的添加 1:遍历数组 遍历数组方法: :数组.length ###获取数组长度 :数组.GetLowerBound ...
- (转)LoadRunner集合点设置1
集合点的意思时等到特定的用户数后再一起执行某个操作,比如一起保存,一起提交(我们通常意义上的并发数并不是指一起提交或者一起保存),一般情况下使用不到集合点,不过,订票系统或者促销类需要用到,比如说某个 ...
- volatile关键字及Java内存模式
参考文档:https://www.cnblogs.com/_popc/p/6096517.html volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情.它与Java的内存 ...