29. K8s 核心组件讲解——Controller
本章讲解知识点
- Controller Manager 概述
- Replication Controller
- Node Controller
- ResourceQuota Controller
- Namespace Controller
- Service Controller 与 Endpoint Controller
<br>
1. Controller Manager 概述
1.1 基本概念
一般来说,智能系统和自动系统通常会通过一个“操作系统”不断修正系统的工作状态。在 Kubernetes 集群中,每个 Controller 都是这样的一个“操作系统”,Controller Manager 作为集群内部的管理控制中心,负责集群内的 Node、Pod 副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个 Controller 意外宕机时,Controller Manager 会及时发现此故障并执行自动化修复流程,确保集群的各个资源始终处于预期的工作状态。
Controller Manager 中包含多个子控制器,例如 ReplicaSet Controller、Deployment Controller、Job Controller 等,每个子控制器负责管理不同类型的资源。例如,ReplicaSet Controller 确保在集群中的每个节点上都有正确数量的 Pod 实例在运行,Deployment Controller 则可以进行滚动更新操作,Job Controller 则可以创建和管理批处理作业等。
Controller Manager 的作用不仅仅是简单的资源管理,它还负责监控集群中各个控制器的状态,如发现控制器失败、重启或停止等情况时,Controller Manager 会尝试自动修复或重新启动控制器,确保集群的正常运行。
Controller Manager 通过一个名为 kube-controller-manager 的进程提供服务,该进程运行在 Master 上。属于静态 pod。
[root@master mtuser]# kubectl get pod -A | grep kube-con kube-system kube-controller-manager-master 1/1 Running 7 26d
1.2 Controllers
Controller Manager 内部包含多种 Controller,每种 Controller 都负责一种具体的控制流程,而 Controller Manager 正是这些 Controller 的核心
- Replication Controller
- Node Controller
- ResourceQuota Controller
- Namespace Controller
- ServiceAccount Controller
- Token Controller
- Service Controller
- Endpoint Controller
每个 Controller 通过 API Server 提供的接口实时监控整个集群的每个资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试着将系统状态从"现有状态"修正到"期望状态"。
<br>
2. Replication Controller
这里的 Replication Controller 所指的是副本控制器,并不是 RC 资源对象,注意不要混淆。
Replication Controller 副本控制器的核心作用是确保在任何时候集群中一个 RC 所关联的 Pod 副本数始终保持预设值。需要注意的一点是:只有当 Pod 的重启策略是 Always 的时候(RestartPolicy=Always),副本控制器才会管理该 Pod 的操作(例如创建、销毁、重启等)。
Replication Controller 副本控制器在管理 Pod 时的一些特征:
在通常情况下,Pod 对象被成功创建后不会消失,唯一的例外是当 Pod 处于 succeeded 或 failed 状态的时间过长(超时参数由系统设定)时,该 Pod 会被系统自动回收。管理该 Pod 的副本控制器将在其他工作节点上重新创建、运行该 Pod 副本。
RC 中的 Pod 模板就像一个模具,模具制造出来的东西一旦离开模具,它们之间就再没关系了。一旦 Pod 被创建,无论模板如何变化,也不会影响到已经创建的 Pod。
此外,Pod 可以通过修改标签来脱离 RC 的管控,该方法可以用于将 Pod 从集群中迁移,数据修复等调试。删除一个 RC 不会影响它所创建的 Pod,如果要删除 Pod 需要将 RC 的副本数属性设置为 0。
最好不要越过 RC 而直接创建 Pod,因为 Replication Controller 会通过 RC 管理 Pod 副本,实现自动创建、补足、替换、删除 Pod 副本,这样能提高系统的容灾能力,减少由于节点崩溃等意外状况造成的损失。即使你的应用程序只用到一个 Pod 副本,我们也强烈建议使用 RC 来定义 Pod。
Replication Controller 的职责:
- 确保当前集群中有且仅有 N 个 Pod 实例,N 是 RC 中定义的 Pod 副本数量。
- 通过调整 RC 中的 spec.replicas 属性值来实现系统扩容或缩容。
- 通过改变 RC 中的 Pod 模板(主要是镜像版本)来实现系统的滚动升级。
与上述三类职责所对应的是 Replication Controller 的三类典型使用场景:
- 重新调度,当发生节点故障或 Pod 被意外终止运行时,可以重新调度保证集群中仍然运行指定的副本数。
- 弹性伸缩,通过手动或自动扩容代理修复副本控制器的 spec.replicas 属性,可以实现弹性伸缩。
- 滚动更新,推荐的方式是创建一个新的只有一个副本的 RC,若新的 RC 副本数量加 1,则旧的 RC 的副本数量减 1,直到这个旧的 RC 的副本数量为零,然后删除该旧的 RC。kubectl rolling-update 命令就是按该推荐方式所实现的。
<br>
3. Node Controller
kubelet 进程在启动时会通过 API Server 注册自身的节点信息,并定时向 API Server 汇报状态信息,API Server
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专刊适合于立志转行云计算的小白,有一定的编程、操作系统、计算机网络、数据结构、算法基础。 本专刊同时也适合于面向云计算(Docker + Kubernetes)求职的从业者。 本专刊囊括了云计算、VMWare、Docker、Kubernetes、Containerd等一系列知识点的讲解,并且最后总