你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
验证与容器注册表的连接
本文是一系列文章的其中一篇。 从概述开始。
要在 Azure Kubernetes 服务 (AKS) 群集中成功部署容器化应用程序,必须验证群集与容器注册表之间的连接。 此步骤可保证工作器节点具有从注册表拉取所需容器映像所需的权限。
识别症状
当在代理节点上运行的 kubelet 为 Pod 创建容器时,由于发生 ImagePullBackOff
错误,一个或多个容器最终可能处于等待状态。 ImagePullBackoff 是 Kubernetes 中的常见错误消息,用于指示无法从公共或专用注册表拉取所需的容器映像。 各种因素都可能导致此错误,包括网络连接问题、映像名称或标记不正确、权限不足或凭据缺失。
状态的 BackOff
部分表示 Kubernetes 会持续尝试拉取映像,并且每次后续尝试之间的延迟将会增加。 延迟逐渐增加,直到达到预先确定的限制,在 Kubernetes 中,这通常设置为 300 秒(5 分钟)。
请务必仔细检查注册表和映像名称,以确保准确。 此外,请确保 AKS 群集具有从相应容器注册表拉取映像所需的权限。
角色分配
将容器注册表附加到现有 AKS 群集时,AcrPull 角色会自动通过注册表分配给与 AKS 群集中代理池关联的 Microsoft Entra 托管标识。 有关详细信息,请参阅《使用 AKS 中的容器注册表进行身份验证》。
运行以下命令,以检索 Kubernetes 群集及其当前角色分配的 kubelet 托管标识:
# Get the kubelet managed identity.
ASSIGNEE=$(az aks show -g $RESOURCE_GROUP -n $NAME --query identityProfile.kubeletidentity.clientId -o tsv)
az role assignment list --assignee $ASSIGNEE --all -o table
运行以下命令,以将 AcrPull
角色分配给 kubelet 托管标识:
AZURE_CONTAINER_REGISTRY_ID=$(az acr show --name <container-registry-name> --query id --output tsv)
az role assignment create --assignee $ASSIGNEE --scope $AZURE_CONTAINER_REGISTRY_ID --role acrpull
排查容器注册表问题
以下部分提供了在 Azure 容器注册表中遇到网络、登录或性能问题时可以参考的指南。
排查网络问题
如果遇到与在虚拟网络中或防火墙或代理服务器后面访问 Azure 容器注册表相关的问题,请考虑以下解决方案:
排查登录问题
如果在登录到 Azure 容器注册表时遇到身份验证和授权问题,请考虑以下解决方案:
排查性能问题
如果 Azure 容器注册表遇到性能问题,请考虑以下解决方案:
- 启用工件缓存。
- 检查网络连接速度。
- 检查可能影响图像层压缩或提取速度的客户端硬件。
- 查看注册表服务层或环境中配置的限制。
- 使用附近区域中的副本配置异地复制注册表以实现最佳性能。
- 优化 DNS 配置,以从地理上遥远的注册表副本中拉取。
这些指南可帮助你确保对 AKS 群集进行无缝图像检索,并确保工作负载顺利运行。
集成第三方容器注册表
使用第三方容器注册表时,需要为注册表创建适当的 ImagePullSecret
凭据,以便 AKS 群集能够安全地访问容器映像。 有关详细信息,请参阅《创建映像拉取机密》。 确保设置正确的权限和凭据,以便可以验证与容器注册表的连接,并支持 AKS 群集在部署期间成功拉取所需的容器映像。 此最佳做法有助于确保顺利可靠地执行 Kubernetes 中容器化工作负载。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Paolo Salvatori | 首席客户工程师
- Francis Simy Nazareth |高级技术专家
若要查看非公开领英个人资料,请登录领英。