大型集群的注意事项
集群是一组在 Kubernetes 代理运行的 节点(物理机或虚拟机),由 控制平面 管理。 Kubernetes v1.31 支持最多 5,000 个节点的集群。更准确地说,Kubernetes 被设计为适应符合以下所有条件的配置
- 每个节点不超过 110 个 Pod
- 不超过 5,000 个节点
- 不超过 150,000 个总 Pod
- 不超过 300,000 个总容器
您可以通过添加或移除节点来扩展集群。您执行此操作的方式取决于集群的部署方式。
云提供商资源配额
为了避免遇到云提供商配额问题,在创建具有多个节点的集群时,请考虑
- 为以下云资源请求配额增加
- 计算实例
- CPU
- 存储卷
- 正在使用的 IP 地址
- 数据包过滤规则集
- 负载均衡器数量
- 网络子网
- 日志流
- 将集群扩展操作限制在批次中,并在批次之间暂停,因为某些云提供商会对创建新实例进行限速。
控制平面组件
对于大型集群,您需要一个具有足够的计算能力和其他资源的控制平面。
通常,您会在每个故障域中运行一到两个控制平面实例,首先垂直扩展这些实例,然后在达到 (垂直) 扩展的收益递减点后进行水平扩展。
您应该在每个故障域中运行至少一个实例以提供容错能力。Kubernetes 节点不会自动将流量转向同一故障域中的控制平面端点;但是,您的云提供商可能具有自己的机制来执行此操作。
例如,使用托管负载均衡器,您可以配置负载均衡器以发送来自 kubelet 和 Pod 的故障域 *A* 中的流量,并将该流量仅定向到也在区域 *A* 中的控制平面主机。如果单个控制平面主机或端点故障域 *A* 离线,这意味着来自区域 *A* 中的节点的所有控制平面流量现在都在区域之间发送。在每个区域中运行多个控制平面主机可以降低这种结果的可能性。
etcd 存储
为了提高大型集群的性能,您可以将事件对象存储在单独的专用 etcd 实例中。
在创建集群时,您可以(使用自定义工具)
- 启动和配置其他 etcd 实例
- 配置 API 服务器 以使用它存储事件
有关为大型集群配置和管理 etcd 的详细信息,请参阅 为 Kubernetes 操作 etcd 集群 和 使用 kubeadm 设置高可用性 etcd 集群。
附加组件资源
Kubernetes 资源限制 有助于最大程度地减少内存泄漏以及 Pod 和容器可能影响其他组件的其他方式的影响。这些资源限制适用于 附加组件 资源,就像它们适用于应用程序工作负载一样。
例如,您可以为日志记录组件设置 CPU 和内存限制
...
containers:
- name: fluentd-cloud-logging
image: fluent/fluentd-kubernetes-daemonset:v1
resources:
limits:
cpu: 100m
memory: 200Mi
附加组件的默认限制通常基于从在小型或中型 Kubernetes 集群上运行每个附加组件获得的经验数据。在大型集群上运行时,附加组件通常比其默认限制消耗更多某些资源。如果在未调整这些值的情况下部署大型集群,则附加组件可能会不断被杀死,因为它们会不断达到内存限制。或者,附加组件可能会运行,但由于 CPU 时间片限制而导致性能低下。
为了避免遇到集群附加组件资源问题,在创建具有多个节点的集群时,请考虑以下因素
- 某些附加组件会垂直扩展 - 对于集群或服务整个故障域,只有一个附加组件副本。对于这些附加组件,请在扩展集群时增加请求和限制。
- 许多附加组件会水平扩展 - 您通过运行更多 Pod 来添加容量 - 但对于非常大的集群,您可能还需要稍微提高 CPU 或内存限制。 垂直 Pod 自动缩放器 可以以 *推荐器* 模式运行,以提供对请求和限制的建议数字。
- 某些附加组件在每个节点上运行一个副本,由 DaemonSet 控制:例如,节点级日志聚合器。与水平扩展的附加组件类似,您可能还需要稍微提高 CPU 或内存限制。
下一步
VerticalPodAutoscaler
是一个自定义资源,您可以将其部署到集群中,以帮助您管理 Pod 的资源请求和限制。
详细了解 垂直 Pod 自动缩放器 以及如何使用它来扩展集群组件,包括集群关键附加组件。阅读有关 集群自动缩放 的内容
附加组件调整器 可帮助您在集群规模发生变化时自动调整附加组件的大小。