2.1.2 Controller

Kubernetes 集群的设计中,Pod 是有生命周期的对象。用户通过手工创建或由 Controller(控制器)直接创建的 Pod 对象会被“调度器”(Scheduler)调度至集群中的某工作节点运行,待到容器应用进程运行结束之后正常终止,随后就会被删除。另外,节点资源耗尽或故障也会导致 Pod 对象被回收。

但 Pod 对象本身并不具有“自愈”功能,若是因为工作节点甚至是调度器自身导致了运行失败,那么它将会被删除;同样,资源耗尽或节点故障导致的回收操作也会删除相关的 Pod 对象。在设计上,Kubernetes 使用“控制器”实现对一次性的(用后即弃)Pod 对象的管理操作, 例如,要确保部署的应用程序的 Pod 副本数量严格反应用户期望的数目,以及基于 Pod 模版来重建 Pod 对象等,从而实现 Pod 对象的扩缩容、滚动更新和自愈能力等。例如,某节点发生故障时,相关的控制器会将此节点上运行的 Pod 对象重新调度到其他节点上进行重建。

控制器本身也是一种资源类型,它有着多种实现,其中与工作负载相关的实现 Reqlication Controller、Deployment、StatefulSet、DeamonSet 和 Jobs 等,也可统称它们为 Pod 控制器。如下图中的 Doployment 就是这类控制器的代表实现,是目前最常用的管理无状态应用的 Pod 控制器。

Pod 控制器的定义通常由期望的副本数量、Pod 模版和标签选择器(Label Selector)组成。Pod 控制器会根据标签选择器对 Pod 对象的标签进行匹配检查,所有满足选择条件的 Pod 对象都将受控于当前控制器并计入其副本总数,并确保此数目能够精确反映期望的副本数。

需要注意的是,在实际的应用场景中,在接受到请求流量负载显著低于或接近于已有 Pod 副本的整体承载能力时,用户需要手动修改 Pod 控制器中的期望副本数量以实现应用规模的扩容或缩容。不过,若集群中部署了 HeapSter 或 Prometheus 一类的资源指标监控附件时,用户还可以使用“HorizontalPodAutoscaler”(HPA) 计算出合适的 Pod 副本数量,并自动修改 Pod 控制器中期望的副本数以实现应用规模的动态伸缩,提高集群资源利用率,如下图所示。

Kubernetes 集群中的每个节点都运行着 cAdvisor 以收集容器及节点 CPU、内存及磁盘资源的利用率指标数据,这些统计数据由 Heapster 聚合后可通过 API Server 访问。HorizontalPodAutoscaler 基于这些统计数据监控容器健康状态并做出扩展决策。

Replication Controller
图 1.4.1.2 - Replication Controller
Horizontal Pod Autoscaler
图 1.4.1.2 - Horizontal Pod Autoscaler

results matching ""

    No results matching ""