关于 Kubernetes中ReplicaSet和ReplicationController的一些笔记
请不要把陌生人的些许善意,视为珍稀的瑰宝,却把身边亲近人的全部付出,当做天经地义的事情,对其视而不见 ——烽火戏诸侯《剑来》
写在前面
- 学习
k8s
这里整理记忆 - 其实
RC
和RS
用的不是特别多,RC
更是早期的资源对象 RC
->RS
->Deploy
的发展顺序,所以我们一般使用Deploy
较多- 博文内容涉及
RC/RS
的一些基本操作
请不要把陌生人的些许善意,视为珍稀的瑰宝,却把身边亲近人的全部付出,当做天经地义的事情,对其视而不见 ——烽火戏诸侯《剑来》
ReplicationController(RC)
ReplicationController 确保在任何时候都有特定数量的 Pod 副本处于运行状态。 换句话说,ReplicationController 确保一个 Pod 或一组同类的 Pod 总是可用的。
推荐使用配置 ReplicaSet
的 Deployment
来建立副本管理机制。RC是一个很古老的资源控制器,现在一般不怎么使用,作为了解,和deploy很的相似。
ReplicationController 如何工作
当 Pod 数量过多时,ReplicationController 会终止多余的 Pod。当 Pod 数量太少时,ReplicationController 将会启动新的 Pod。 与手动创建的 Pod 不同,由 ReplicationController 创建的 Pod 在失败、被删除或被终止时会被自动替换。 例如,在中断性维护(如内核升级)之后,你的 Pod 会在节点上重新创建。 因此,即使你的应用程序只需要一个 Pod,你也应该使用 ReplicationController 创建 Pod。 ReplicationController 类似于进程管理器,但是 ReplicationController 不是监控单个节点上的单个进程,而是监控跨多个节点的多个 Pod。
ReplicationController 的替代方案 ReplicaSet
ReplicaSet
是下一代 ReplicationController
, 支持新的基于集合的标签选择算符。 它主要被 Deployment
用来作为一种编排 Pod
创建、删除及更新的机制。 请注意,我们推荐使用 Deployment
而不是直接使用 ReplicaSet
,除非 你需要自定义更新编排或根本不需要更新。
Deployment
是一种更高级别的 API 对象, 它以类似于 kubectl rolling-update
的方式更新其底层 ReplicaSet
及其 Pod。
如果你想要这种滚动更新功能,那么推荐使用 Deployment
,因为与 kubectl rolling-update
不同, 它们是声明式的、服务端的,并且具有其它特性。
创建一个RC
1 | apiVersion: v1 |
1 | ┌──[root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController] |
修改RC副本数
1 | ┌──[root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController] |
删除RC
1 | ┌──[root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController] |
ReplicaSet(RS)
ReplicaSet
的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合
。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
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,除非 你需要自定义更新业务流程或根本不需要更新。
创建一个RS
1 | apiVersion: apps/v1 |
1 |
|
修改RS副本数
1 | ┌──[root@vms81.liruilongs.github.io]-[~/ansible/k8s-ReplicationController] |
三者在胚子文件的区别 |
---|
副本数的修改
1 | kubectl scale deployment nginx --replicas=20 |
关于 Kubernetes中ReplicaSet和ReplicationController的一些笔记
1.K8s 集群高可用master节点ETCD全部挂掉如何恢复?
2.K8s 集群高可用master节点故障如何恢复?
3.K8s 镜像缓存管理 kube-fledged 认知
4.K8s集群故障(The connection to the server <host>:<port> was refused - did you specify the right host or port)解决
5.关于 Kubernetes中Admission Controllers(准入控制器) 认知的一些笔记
6.K8s Pod 创建埋点处理(Mutating Admission Webhook)
7.关于AI(深度学习)相关项目 K8s 部署的一些思考
8.K8s Pod 安全认知:从openshift SCC 到 PSP 弃用以及现在的 PSA