大型集群注意事项
集群是由 节点(物理机或虚拟机)组成,这些节点运行 Kubernetes 代理,并由 控制平面 管理。Kubernetes v1.30 支持最多 5,000 个节点的集群。更具体地说,Kubernetes 旨在适应满足*所有*以下条件的配置
- 每个节点不超过 110 个 Pod
- 不超过 5,000 个节点
- 总 Pod 数量不超过 150,000 个
- 总容器数量不超过 300,000 个
您可以通过添加或移除节点来扩展集群。具体操作方式取决于集群的部署方式。
云提供商资源配额
为了避免遇到云提供商配额问题,在创建具有多个节点的集群时,请考虑
- 请求增加云资源的配额,例如
- 计算实例
- CPU
- 存储卷
- 正在使用的 IP 地址
- 数据包过滤规则集
- 负载均衡器数量
- 网络子网
- 日志流
- 对集群扩展操作进行门控,以分批启动新节点,并在批次之间暂停,因为某些云提供商会对新实例的创建进行速率限制。
控制平面组件
对于大型集群,您需要一个具有足够计算和其他资源的控制平面。
通常,您会在每个故障域中运行一个或两个控制平面实例,首先垂直扩展这些实例,然后在达到(垂直)扩展收益递减点后再进行水平扩展。
您应该在每个故障域中至少运行一个实例,以提供容错能力。Kubernetes 节点不会自动将流量引导至位于同一故障域中的控制平面端点;但是,您的云提供商可能拥有自己的机制来实现这一点。
例如,使用托管负载均衡器时,您可以将负载均衡器配置为发送来自故障域*A*中的 kubelet 和 Pod 的流量,并将该流量仅定向至也位于区域*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 或内存限制。VerticalPodAutoscaler 可以以*推荐器*模式运行,为请求和限制提供建议值。
- 某些插件在每个节点上运行一个副本,由 守护进程集 控制:例如,节点级日志聚合器。与水平扩展插件的情况类似,您可能还需要稍微提高 CPU 或内存限制。
下一步
VerticalPodAutoscaler
是一种自定义资源,您可以将其部署到集群中,以帮助您管理 Pod 的资源请求和限制。
详细了解 垂直 Pod 自动缩放器 以及如何使用它来扩展集群组件,包括关键集群插件。阅读有关 集群自动缩放 的信息
插件调整器 可帮助您随着集群规模的变化自动调整插件的大小。