Kubernetes 系列 Replication Controller
RC是k8s系统中核心概念之一,它定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值。所以RC定义包括如下 几个部分: (1) Pod期待的副本数(replicas) (2) 用于筛选目标Pod的Label Selector。(3)当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)。
下面是一个完整的rc定义的例子,即确保拥有name=userpermissionapi标签的这个Pod,在整个k8s集群中始终只有一个副本。
apiVersion: v1 kind: ReplicationController metadata: name: userpermissionapi labels: name: userpermissionapi spec: replicas: 1 selector: name: userpermissionapi template: metadata: labels: name: userpermissionapi spec: containers: - name: userpermissionapi image: swr.cn-east-3.myhuaweicloud.com/hushaoren/userpermissionapi:v2.1 imagePullPolicy: IfNotPresent ports: - containerPort: 5000 tolerations: - key: "node-role.kubernetes.io/master" operator: "Equal" value: "" effect: "NoSchedule"
当我们定义一个rc,并提交到k8s集群中以后,master节点上的controller manager组件就得到通知,定期巡检系统中当前存活的目标 Pod,并确保目标pod实例数量刚好等于此pc的期望值。
多了,rc会停掉一些pod,少了会创建一些pod。所以说rc 实现了用户应用集群的高可用性。此外还可以修改pc的副本数量,实现Pod的动态缩放功能. 如执行:
kubectl scale rc redis-slave --replicas=3
注意:删除rc并不会影响通过该rc已创建好的pod,为了删除所有pod,可以设置 replicas的值为0,然后更新该rc。
平滑升级: 比如我们的应用升级时,通常会通过build一个新的docker镜像,修复rc配置文件拉取镜像的版本。假如一个应用有10个pod旧版本,最佳方式是每次停一个旧版本pod,同时创建一个新版本的pod(自动创建),整个过程中,此消彼长,而运行中的pod数量始终是10个,这也叫滚动升级。
由于Replication Controller与k8s代码上的模块Replication Controller同名,所以在k8s v1.2时,它就升级成了另一个新的概念-------replica set。官方叫下一代rc。它与rc当前存在的唯一区别是: replica sets支持基于集合的label selector,而rc只支持基于等式的label selecor。
kubectl命令行工具适用于rc的绝大部分命令都同样适用于replica set。此外当前我们很少单独使用replica set, 它主要被deployment 这个更高层次的资源对象所使用。从而形成一整套pod创建,删除,更新的编排机制。 当使用deployment 时,无须关心它是如何创建和维护replica set的,这一切都是自动发生的。
replica set和deployment 这两个重要资源对象替代了之前的Replication Controller的使用。
总结:
1. 大多数情况下,我们通过定义一个rc实现pod的创建过程及副本数量的自动控制。
2. rc里包括完整的pod定义模板(ymal中节点可以全部配置)
3. rc通过label selector机制实现对pod副本的自动控制
4. 通过改变rc里的pod副本数量,可以实现pod的扩容和缩容功能。
5. 能过改变rc里pod模板的镜像版本,可以实现pod的滚动升级功能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2018-12-27 redis 系列27 Cluster高可用 (2)