将 Kubernetes 扩展到 2,500 个节点

OpenAI Blog 新闻

摘要

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 内部镜像的白名单也做了同样的处理。

相似文章

Kubernetes 扩展到 7,500 个节点

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 优化的批处理自动扩展管理器,强调基础设施质量如何倍增研究进展。

构建智能时代的计算基础设施

OpenAI Blog

OpenAI宣布通过Stargate项目突破10GW计算基础设施里程碑,强调通过与生态系统合作伙伴的协作和社区参与实现快速扩张,以满足加速增长的AI需求。