大型集群的考量
集群是一组运行 Kubernetes 代理的节点(物理或虚拟机),由控制平面管理。Kubernetes v1.32 支持最多 5,000 个节点的集群。更具体地说,Kubernetes 旨在适应满足以下所有条件的配置
- 每个节点不超过 110 个 Pod
- 不超过 5,000 个节点
- 总共不超过 150,000 个 Pod
- 总共不超过 300,000 个容器
你可以通过添加或删除节点来扩展集群。具体做法取决于集群的部署方式。
云服务提供商资源配额
为了避免遇到云服务提供商的配额问题,在创建具有多个节点的集群时,请考虑
- 请求增加云资源配额,例如
- 计算实例
- CPU
- 存储卷
- 正在使用的 IP 地址
- 数据包过滤规则集
- 负载均衡器数量
- 网络子网
- 日志流
- 限制集群扩展操作,以批量方式启动新节点,并在批次之间暂停,因为某些云服务提供商会对创建新实例进行速率限制。
控制平面组件
对于大型集群,你需要一个具有足够计算资源和其他资源的控制平面。
通常,你会在每个故障区域运行一到两个控制平面实例,首先垂直扩展这些实例,然后在达到(垂直)扩展的回报递减点后进行水平扩展。
你应该在每个故障区域至少运行一个实例,以提供容错能力。Kubernetes 节点不会自动将流量导向同一故障区域中的控制平面端点;但是,你的云服务提供商可能具有自己的机制来执行此操作。
例如,使用托管负载均衡器,你可以配置负载均衡器将来自故障区域 A 中 kubelet 和 Pod 的流量,仅定向到也位于区域 A 中的控制平面主机。如果区域 A 中的单个控制平面主机或端点发生故障,则意味着区域 A 中节点的所有控制平面流量现在都在区域之间发送。在每个区域中运行多个控制平面主机可以降低发生这种情况的可能性。
etcd 存储
为了提高大型集群的性能,你可以将 Event 对象存储在单独的专用 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 自动缩放器以及如何使用它来扩展集群组件(包括集群关键插件)的更多信息。阅读有关集群自动缩放的信息
插件调整器可帮助你在集群规模变化时自动调整插件大小。