将 Kubernetes 扩展到 2,500 个节点
摘要
OpenAI 分享了将 Kubernetes 扩展到 2,500 个节点的基础设施经验教训,详细介绍了容器镜像拉取的优化方案,包括 kubelet 配置更改、Docker overlay2 迁移和预加载策略,以解决 Pending pod 的问题。
暂无内容
查看缓存全文
缓存时间:
2026/04/20 14:45
# 将 Kubernetes 扩展到 2,500 个节点
来源:https://openai.com/index/scaling-kubernetes-to-2500-nodes/
我们的 Dota(https://blog.openai.com/more-on-dota-2/) 项目最初运行在 Kubernetes 上。随着规模扩大,我们发现新的 Kubernetes 节点上的 Pod 经常处于 Pending(https://kubernetes.io/docs/tasks/debug-application-cluster/debug-pod-replication-controller/#my-pod-stays-pending) 状态很长时间。游戏镜像约为 17GB,在新集群节点上拉取通常需要 30 分钟,所以我们理解为什么 Dota 容器会长时间处于 Pending 状态——但这对其他容器也同样成立。经过深入调查,我们发现 kubelet(https://kubernetes.io/docs/admin/kubelet) 有一个 `--serialize-image-pulls` 标志,默认设置为 `true`,这意味着 Dota 镜像拉取会阻塞所有其他镜像。将其改为 `false` 需要将 Docker 从 AUFS 切换到 overlay2。为了进一步加快拉取速度,我们还将 Docker 根目录移到了实例附加的 SSD,就像我们对 etcd 机器所做的那样。
即使优化了拉取速度,我们仍然看到 Pod 启动失败,出现神秘的错误信息:`rpc error: code = 2 desc = net/http: request canceled`。kubelet 和 Docker 日志也显示镜像拉取因进度缺失而被取消的消息。我们追踪到根本原因是大镜像拉取/提取耗时过长,或者我们有大量待拉取镜像的积压。为了解决这个问题,我们将 kubelet 的 `--image-pull-progress-deadline` 标志设置为 30 分钟,并将 Docker 守护进程的 `max-concurrent-downloads` 选项设置为 10。(第二个选项并没有加快大镜像的提取,但允许待拉取镜像队列并行处理。)
我们最后一个 Docker 拉取问题来自 Google Container Registry。默认情况下,kubelet 从 `gcr.io` 拉取一个特殊镜像(由 `--pod-infra-container-image` 标志控制),该镜像在启动任何新容器时使用。如果该拉取因任何原因失败,比如超出配额(https://github.com/kubernetes/kubernetes/issues/50568),该节点将无法启动任何容器。因为我们的节点通过 NAT 访问 `gcr.io` 而不是有自己的公网 IP,我们很可能会触及这个按 IP 的配额限制。为了解决这个问题,我们通过使用 `docker image save -o /opt/preloaded_docker_images.tar` 和 `docker image load -i /opt/preloaded_docker_images.tar`,简单地在 Kubernetes 工作节点的机器镜像中预加载了该 Docker 镜像。为了提高性能,我们对一个包含 Dota 镜像等常见 OpenAI 内部镜像的白名单也做了同样的处理。
相似文章
OpenAI Blog
# Kubernetes 扩展到 7,500 个节点 来源:[https://openai.com/index/scaling-kubernetes-to-7500-nodes/](https://openai.com/index/scaling-kubernetes-to-7500-nodes/) OpenAI将单个 Kubernetes 集群扩展到这个规模很少见,需要特殊的关注,但好处是提供了一个简单的基础设施,让我们的机器学习研究团队能够更快地迭代并扩展,而无需改变代码。从我们之前关于[扩展到 2,500 个节点](https://openai.com/index/scaling-kube)的文章以来
OpenAI Blog
OpenAI 分享了他们的深度学习基础设施方法,并开源了 kubernetes-ec2-autoscaler,一个为 Kubernetes 优化的批处理自动扩展管理器,强调基础设施质量如何倍增研究进展。
NVIDIA Blog
NVIDIA正将其GPU动态资源分配(DRA)驱动捐赠给CNCF及Kubernetes社区,使其从厂商主导转变为社区所有。此次捐赠旨在简化Kubernetes中面向AI工作负载的GPU资源管理,并通过与CNCF Confidential Containers社区的协作,为Kata Containers提供GPU支持。
OpenAI Blog
OpenAI宣布通过Stargate项目突破10GW计算基础设施里程碑,强调通过与生态系统合作伙伴的协作和社区参与实现快速扩张,以满足加速增长的AI需求。
Reddit r/AI_Agents
讨论了在预算有限的情况下为AI Agent管道扩展基础设施的实际挑战,强调了基于CPU/内存的自动扩展对于GPU推理工作负载的不足。