在 Azure Kubernetes 服务 (AKS) 上使用项目流式处理功能来缩短映像拉取时间(预览)

高性能计算工作负载通常涉及大型映像,这可能导致映像拉取时间长并拖慢工作负载部署速度。 通过 AKS 上的项目流式处理功能,可将容器映像从 Azure 容器注册表 (ACR) 流式传输到 AKS。 AKS 只拉取初始 Pod 启动所需的层,从而缩短拉取映像和部署工作负载所需的时间。

项目流式处理可将 Pod 就绪时间减少 15% 以上(具体取决于映像的大小),并且最适合<30 GB 的映像。 我们的测试显示,<10 GB 的映像的 Pod 启动时间从数分钟缩短到了数秒。 如果有 Pod 需要访问大型文件 (>30 GB),应将其装载为卷,而不是将其构建为层。 这是因为如果 Pod 要求启动该文件,会造成节点拥塞。 如果启动时需要从文件系统读取大量图像,则项目流式处理并不理想。 使用项目流式处理时,Pod 启动将并发进行,而如果不使用此功能,Pod 以串行方式启动。

本文介绍如何在 AKS 节点池上启用项目流式处理功能来流式传输 ACR 中的项目。

重要

AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

先决条件

注意

项目流式处理仅在 Ubuntu 22.04、Ubuntu 20.04 和 Azure Linux 节点池上受支持。 不支持 Windows 节点池。

安装 aks-preview CLI 扩展

  1. 使用 az extension add 命令安装 aks-preview CLI 扩展。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令更新扩展,确保已安装最新版本。

    az extension update --name aks-preview
    

在订阅中注册 ArtifactStreamingPreview 功能标志

  • 使用 az feature register 命令在订阅中注册 ArtifactStreamingPreview 功能标志。

    az feature register --namespace Microsoft.ContainerService --name ArtifactStreamingPreview
    

在 ACR 上启用项目流式处理

要在 AKS 上使用项目流式处理,需要在 ACR 上启用它。 有关详细信息,请参阅 ACR 上的项目流式处理

  1. 使用 az group create 命令创建 Azure 资源组来保存 ACR 实例。

    az group create --name myStreamingTest --location chinanorth3
    
  2. 使用带 --sku Premium 标志的 az acr create 命令创建新的高级 SKU Azure 容器注册表。

    az acr create --resource-group myStreamingTest --name mystreamingtest --sku Premium
    
  3. 使用 az configure 命令为订阅配置默认 ACR 实例。

    az configure --defaults acr="mystreamingtest"
    
  4. 使用 az acr import 命令将映像推送或导入注册表。

    az acr import --source docker.io/jupyter/all-spark-notebook:latest -t jupyter/all-spark-notebook:latest
    
  5. 使用 az acr artifact-streaming create 命令根据映像创建流项目。

    az acr artifact-streaming create --image jupyter/all-spark-notebook:latest
    
  6. 使用 az acr manifest list-referrers 命令验证所生成的项目流式处理。

    az acr manifest list-referrers -n jupyter/all-spark-notebook:latest
    

在 AKS 上启用项目流式处理

在新的节点池上启用项目流式处理

  • 使用 az aks nodepool add 命令和 --enable-artifact-streaming 新建启用了项目流式处理的节点池。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name myNodePool \
        --enable-artifact-streaming
    

在现有节点池上启用项目流式处理

  • 使用带有 --enable-artifact-streamingaz aks nodepool update 命令更新现有节点池以启用项目流式处理。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name myNodePool \
        --enable-artifact-streaming
    

检查是否启用了项目流式处理

现在你已经在高级 ACR 上启用了项目流式处理,并将其连接到了已启用项目流式处理的 AKS 节点池,此群集上有从已启用项目流式处理的 ACR 进行映像拉取的任何新 Pod 部署都将缩短映像拉取时间。

  • 使用 az aks nodepool show 命令检查节点池是否已启用项目流式处理。

    az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name myNodePool --query artifactStreamingProfile
    

    在输出中,检查 Enabled 字段是否设置为 true

后续步骤

本文介绍了如何在 AKS 节点池上启用项目流式处理功能来流式传输 ACR 中的项目并缩短映像拉取时间。 若要详细了解如何在 AKS 中使用容器映像,请参阅 AKS 中容器映像管理和安全性的最佳做法