大型集群的考量

集群是一组运行 Kubernetes 代理的节点(物理机或虚拟机),由控制平面管理。Kubernetes v1.33 支持最多 5,000 个节点的集群。更具体地说,Kubernetes 设计上支持满足以下所有标准的配置

  • 每个节点最多 110 个 Pod
  • 最多 5,000 个节点
  • Pod 总数最多 150,000 个
  • 容器总数最多 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 或内存限制。Vertical Pod Autoscaler 可以以 recommender 模式运行,为请求和限制提供建议值。
  • 一些插件作为每个节点的一个副本运行,由DaemonSet控制:例如,节点级日志聚合器。与水平扩缩的插件类似,你可能还需要略微提高 CPU 或内存限制。

下一步

  • VerticalPodAutoscaler 是一个你可以部署到集群中的自定义资源,用于帮助你管理 Pod 的资源请求和限制。
    了解有关Vertical Pod Autoscaler的更多信息,以及如何使用它来扩缩集群组件,包括集群关键插件。

  • 阅读有关节点自动扩缩的信息

  • 插件调整器帮助你在集群规模变化时自动调整插件大小。

上次修改时间 April 26, 2024 at 3:39 PM PST:集群自动扩缩 -> 节点自动扩缩清理 (dc530ffd6a)