Kubernetes 为 Pod 控制器提供了多种开箱即用的选择。最简单的选择是使用 ReplicaSet,它为特定 Pod 维护给定数量的 Pod 实例。如果一个实例失败,ReplicaSet 将启动一个新实例来替换它。
其次,有 Deployments,它自己控制一个 ReplicaSet。当在 Kubernetes 上运行应用程序时,部署是最流行的控制器,它们可以使用跨 ReplicaSet 的滚动更新轻松升级应用程序。
Horizontal Pod Autoscalers 允许应用程序根据性能指标自动扩展到不同数量的实例,从而将部署提升到一个新的水平。
最后,有一些特殊控制器在某些情况下可能很有价值:
控制器的实际行为,无论是像 ReplicaSet 这样的默认 Kubernetes 控制器还是自定义控制器(例如,PostgreSQL Operator),都应该很容易预测。标准控制回路的简化视图类似于下图:
图 4.1 – Kubernetes 控制器的基本控制循环
如您所见,控制器会不断检查预期集群状态(我们需要此应用程序的七个 Pod)与当前集群状态(我们有此应用程序的五个 Pod 正在运行)。当预期状态与当前状态不匹配时,控制器将通过 API 采取行动来纠正当前状态以匹配预期状态。
现在,你应该 理解为什么在 Kubernetes 上需要控制器:在提供高可用的应用程序时,Pod 本身并不是一个足够强大的原语。让我们继续讨论最简单的此类控制器:ReplicaSet。