在Azure Kubernetes 服务 (AKS)中运行大规模、AI、GPU、Windows或其他性能敏感的工作负荷时,新预配的节点必须下载容器映像、安装依赖项和完成初始化任务,然后才能运行工作负荷。 这种针对每个节点的设置工作会在每次扩缩容事件中重复进行,从而延长节点启动时间。
准备映像规范(PIS)是一项 AKS 功能,可用于创建预配置的节点映像,其中包含已应用所需的容器映像和节点自定义。 AKS 根据需要生成或重新生成准备好的映像,例如创建或更新节点池以引用 PIS 版本。 Kubernetes 版本更改还可以触发重新生成。
本文介绍 PIS 的工作原理、描述常见用例,并将其与相关的 AKS 功能进行比较。 若要创建和使用 PIS,请参阅 AKS 中的“使用准备的图像规范”(PIS)。
Important
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
什么是预准备映像规范(PIS)?
PIS 是一种 Azure 资源,用于定义 AKS 应预先写入预准备节点映像中的内容和配置。 可以包括以下任意组合:
- 用于预缓存的容器映像
- 自定义初始化脚本
- 操作系统自定义
- 运行时依赖项和安全策略
当 AKS 预配引用了 PIS 的节点池时,它会为你创建和管理预准备映像,同时保留标准的 AKS 托管体验。 与不受支持的自带映像(BYOI)方法不同,你只需定义目标状态,AKS 会负责创建和维护底层映像。
PIS 的工作原理
PIS 在节点池创建/更新流中提前移动映像准备工作,以便将来的横向扩展操作可以使用已准备的映像。
- 创建 PIS 资源。
- 定义容器映像和自定义脚本。
- AKS 创建一个临时构建节点。
- AKS 应用所有指定的自定义项并缓存映像。
- AKS 快照已配置的节点并创建已准备的映像。
- 将来的节点预配和横向扩展操作将从准备好的映像启动。
由于已准备好的映像中已存在容器映像和自定义项,因此后续节点创建会完全跳过该操作。
当 PIS 包括自定义脚本和缓存的容器映像时,AKS 首先运行自定义脚本。 脚本成功完成后,AKS 会将指定的容器映像缓存到准备好的节点映像中。
这种排序意味着脚本更改可能会影响用于映像缓存的环境,包括容器运行时配置。 考虑到此顺序设计和测试脚本,尤其是在脚本修改容器、注册表配置、凭据、证书、网络或其他可能影响映像拉取或缓存行为的设置时。
预配模型比较
| 运算 | 标准 AKS | 准备的图像规范 |
|---|---|---|
| 节点池创建/更新 | 快速 | 较慢(需要准备图像) |
| 后续横向扩展 | 标准预配 | 加快预配速度 |
| 容器镜像下载 | 在运行时 | 已预缓存 |
| 自定义脚本 | 运行时执行 | 预先内置到镜像中 |
| 启动一致性 | 变量 | 可预言的 |
| 大型图像工作负载 | 启动速度较慢 | 启动速度更快 |
Important
准备好的映像规范(PIS)在准备好映像后多次缩放节点池时,可提供最大的值。 如果节点很少缩放,一次性映像准备成本可能超过优势。
常见用例
PIS 最适用于重复横向扩展方案、大型/稳定的容器映像或依赖项、GPU/AI/Windows工作负载以及节点就绪时间很重要的工作负荷。 一些常见用例包括:
- AI 和机器学习:大型 AI/ML 模型图像通常需要花费大量时间才能拉取。 准备好的图像规范会预先缓存这些映像,以便 GPU 节点更快地达到就绪状态,减少工作负荷启动时间并提高缩放响应能力。
- GPU 工作负载:在准备好的映像中预安装 GPU 驱动程序、CUDA 库和其他依赖项可减少预配开销,并在缩放事件期间加快节点准备速度。
- Windows工作负荷:Windows容器映像往往很大。 准备好的映像规范可减少映像下载时间,并提高Windows节点池的部署一致性。
- 突发缩放:当群集自动缩放程序触发横向扩展事件时,从准备好的映像启动的节点更快地达到就绪状态,减少工作负荷队列时间,并使缩放行为更具可预测性。
- 简化环境的标准化:将一致的配置烘焙到准备好的映像可减少节点池中的配置偏移并简化操作。
- 大型数据/制品缓存:其中包括 LLM 权重、模型文件、训练数据集以及数据库种子二进制大对象,这些二进制大对象可在映像准备过程中由自定义脚本下载。 大型构建产物会增大预构建映像的体积并延长重建时间,因此请务必谨慎地对预构建映像进行版本管理和测试。
注释
首次创建或更新节点池可能需要更长时间,因为需要先构建镜像。
PIS 与其他 AKS 功能的关系
可以与其他 AKS 功能一起使用 PIS 来优化节点预配和缩放。
预置镜像规范和工件流式传输
同时使用 PIS 和制品流式传输来减少节点启动延迟。 PIS 会预先缓存容器映像和依赖项,而制品流式传输会在预配期间将大型制品流式传输到节点。 此组合对于需要大型数据集或模型文件的工作负荷特别有用。
| Feature | 准备的图像规范 | 工件流式处理 |
|---|---|---|
| 加快容器启动速度 | Yes | Yes |
| 脚本执行 | Yes | 否 |
| 容器映像拉取 | 在 AgentPool 更新或节点镜像生成期间 | 在预配 VM 期间 |
有关 Artifact Streaming 的详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 上使用 Artifact Streaming 减少映像拉取时间。
准备的图像规范和自定义节点配置
结合使用 PIS 和自定义节点配置,以应对运行时配置和节点配置场景。 PIS 会预先缓存容器镜像并应用操作系统自定义设置,而自定义节点配置允许在节点预配完成后向其应用运行时配置。
| Feature | 准备的图像规范 | 自定义节点配置 |
|---|---|---|
| 节点映像自定义 | Yes | 否 |
| 容器映像缓存 | Yes | 否 |
| 运行时配置 | 受限 | Yes |
| 持久准备状态 | Yes | 否 |
有关自定义节点配置的详细信息,请参阅自定义Azure Kubernetes 服务 (AKS)节点池的节点配置。
预制映像规范和节点池快照
结合使用 PIS 和节点池快照来保留节点池配置和状态。 PIS 预缓存容器映像并应用 OS 自定义,而节点池快照捕获节点池的当前状态以进行备份或复制。
| Feature | 准备的图像规范 | 节点池快照 |
|---|---|---|
| 图像准备 | Yes | 否 |
| 容器映像缓存 | Yes | 否 |
| 还原节点池配置 | 否 | Yes |
| 性能优化 | Yes | 否 |
有关节点池快照的详细信息,请参阅Azure Kubernetes 服务 (AKS)节点池快照。
支持的自定义
容器映像
准备好的映像规范将容器映像预先缓存到节点映像中,以便节点在预配期间跳过映像拉取。
自定义脚本
您可以包含在准备映像期间运行的初始化脚本。 支持的脚本类型:
- Bash
- PowerShell
常见用途包括安装软件包、配置 OS 设置、应用安全策略以及下载运行时依赖项。
仔细使用自定义脚本,因为它们成为已准备的节点映像生成过程的一部分。 将每个脚本视为版本控制配置:将脚本源存储在源代码管理中,固定每个 PIS 版本使用的脚本内容或 URI,并避免在创建 PIS 版本后就地更改脚本。 如果脚本行为发生更改,请创建新的 PIS 版本,以便节点映像内容保持可跟踪和可重复。
脚本应稳定且安全,可以多次运行。 避免依赖暂时性外部状态的命令,除非依赖项固定到特定版本。 在将脚本用于生产节点池之前,先在非生产环境中测试脚本,并验证成功创建映像和节点池推出行为。
在针对特定 AKS 节点映像版本进行行为验证时,请使用 AKS 节点池快照,以便让测试与已知的节点映像版本对应起来。 这有助于确保在底层 AKS 映像发生变化时,脚本结果保持一致。
想要限制或阻止自定义脚本的组织应考虑使用Azure Policy来强制实施允许的 PIS 配置,例如阻止脚本使用或将脚本源限制为已批准的位置。
操作系统配置
可预先包含在准备好的映像中的操作系统自定义示例包括:
- Sysctl 设置
- 软件包安装
- 运行时配置
- 安全性强化
受支持的操作系统
PIS 支持 Ubuntu、Azure Linux 和Windows节点池。
建议的指标
若要评估环境中 PIS 的效果,请监视以下方面:
| Area | 指标 |
|---|---|
| Provisioning | 节点预配持续时间、就绪时间、工作负荷计划延迟 |
| Scaling | 横向扩展完成时间、自动缩放程序事件、节点启动持续时间 |
| 工作量 | Pod 启动时间、容器映像拉取持续时间、GPU 工作负荷启动时间 |
我们还建议从成本和版本管理的角度对节点池映像进行管理。 跟踪 PIS 版本、映像大小和重新生成频率,以确保准备好的映像保持高效且有效。
最佳做法
- 缓存大型且稳定的镜像:对于体积较大、不常更改且由多个工作负载共享的镜像,请使用 PIS。 频繁更新的映像会降低预制映像的价值,因为您需要经常重新构建它。
- 版本一致:为应用程序版本、安全修补程序和 AKS 节点映像更改创建新的 PIS 版本,使准备好的映像保持最新状态。
- 在生产之前进行验证:在将准备好的映像提升到生产环境之前,请在非生产环境中测试节点启动、工作负荷部署、注册表访问和应用程序功能。 建议先使用 节点池快照 进行测试,然后再将准备好的映像提升到生产环境。
- 自动执行映像刷新:定期重新生成准备好的映像,以合并更新的依赖项、安全修补程序和最新的 AKS 节点映像。
局限性
预览期间存在以下限制:
- 可在 Azure 公共区域中使用,但不包括主权云和物理隔离环境。
- 支持的操作系统包括 Ubuntu、Azure Linux 和 Windows。
- 自定义脚本可能会导致映像生成或纵向扩展失败。
- 修改现有规范时,可能需要重新创建这些规范。
- 引用的是预制映像,而不是由客户管理的映像。 客户将节点池配置为使用受支持的 PIS 版本 ID。 底层已准备好的映像工件仍由 AKS 负责服务管理,不会以客户自有 BYOI、托管映像或映像库映像的形式向客户公开提供。
- 不能直接在节点池之间共享或复用已准备好的映像工件。 若要对另一个节点池使用相同的已准备映像内容,必须使用相应的 PIS 版本 ID 配置该节点池。 您不能复制、导出、修改、授予访问权限,或将已准备好的映像工件附加为客户管理的映像。
常见问题 (FAQ)
PIS 是否替换 AKS 节点映像?
No. AKS 继续使用支持的 AKS 节点映像。 PIS 基于这些映像生成。
PIS 是否支持群集自动缩放程序?
Yes. 配置了 PIS 的节点池可与集群自动扩缩器配合使用。
是否可以创建多个版本?
Yes. PIS 支持版本控制。
PIS 是否减少了 GPU 启动延迟?
PIS 可以通过预缓存依赖项和容器映像来减少初始化开销。
多个节点池是否可以使用相同的 PIS?
多个节点池可以引用相同的 PIS 版本资源 ID,但 AKS 不会公开或支持将单个已准备的映像项目作为客户托管映像跨节点池共享。 每个节点池在其自己的 AgentPool 上下文中使用引用的 PIS 版本。
是否有额外费用?
标准 AKS 计算和存储费用适用。
相关内容
若要创建 PIS,请参阅在 AKS 中创建和管理准备的图像规范(PIS)。