AKS 群集创建问题的基本故障排除

本文概述了在无法成功创建或部署 Microsoft Azure Kubernetes 服务 (AKS) 群集时使用的基本故障排除方法。

先决条件

查看 Azure CLI 中的错误

使用 Azure CLI 创建群集时,如果操作失败,错误将记录为输出。 下面介绍了命令、用户输入和操作输出在 Bash 控制台中的显示方式:

$ az aks create --resource-group myResourceGroup \
> --name MyManagedCluster \
> --load-balancer-sku standard \
> --vnet-subnet-id /subscriptions/01234567-89ab-cdef-0123-456789abcdef/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/aks_demo_vnet/subnets/AKS

It is highly recommended to use USER assigned identity (option --assign-identity) when you want to bring you own subnet, which will have no latency for the role assignment to take effect. When you SYSTEM assigned identity, azure-cli will grant Network Contributor role to the system assigned identity after the cluster is created, and the role assignment will take some time to take effect, see https://learn.microsoft.com/azure/aks/use-managed-identity, proceed to create cluster with system assigned identity? (y/N): y

(ControlPlaneAddOnsNotReady) Pods not in Running status: konnectivity-agent-67f7f5554f-nsw2g,konnectivity-agent-8686cb54fd-xlsgk,metrics-server-6bc97b47f7-dfhbr,coredns-845757d86-7xjqb,coredns-autoscaler-5f85dc856b-mxkrj

Code: ControlPlaneAddOnsNotReady

Message: Pods not in Running status: konnectivity-agent-67f7f5554f-nsw2g,konnectivity-agent-8686cb54fd-xlsgk,metrics-server-6bc97b47f7-dfhbr,coredns-845757d86-7xjqb,coredns-autoscaler-5f85dc856b-mxkrj

这些错误通常包含群集创建中出错的详细说明,并提供指向包含更多详细信息的文章的链接。 此外,可以根据 Azure CLI 操作产生的错误使用我们的故障排除文章作为参考。

查看Azure 门户中的错误详细信息

若要查看有关Azure 门户中的错误的详细信息,请检查 Azure 活动日志。 若要在Azure 门户中查找活动日志的列表,请在“活动日志”上搜索。 或者,选择“ 通知 ” (钟形图标) ,然后选择 活动日志中的“更多事件”。

“活动日志”页上的日志列表包含一个行条目,其中“操作名称”列值名为“创建或更新托管群集”。 由列值 启动的相应事件 设置为工作或学校帐户的名称。 如果操作成功,“ 状态” 列值将显示“ 已接受”。 你还将看到用于创建群集组件的子操作条目,例如以下操作名称:

  • 创建或更新路由表
  • 创建或更新网络安全组
  • 更新用户分配的标识创建
  • 创建或更新负载均衡器
  • 创建或更新公共 IP 地址
  • 创建角色分配
  • 更新资源组

在这些子操作条目中, “状态” 值为 “成功”,“ 由 发起的事件” 字段设置为 “AzureContainerService”。

如果发生错误,该怎么办? 在这种情况下, “创建或更新托管群集 操作 状态” 字段将显示 “失败”。 与创建群集组件的操作不同,此处必须展开失败的操作条目以查看子操作条目。 典型的子操作名称是策略操作,例如 “audit”策略操作“auditIfNotExists”策略操作。 某些子操作将继续显示它们已成功。

若要进一步调查,可以选择失败的子操作之一。 此时会打开一个侧窗格,以便你可以查看有关子操作的详细信息。 可以对“摘要”、“JSON”和“更改历史记录”等字段的值进行故障排除。 JSON 字段以 JSON 格式包含错误的输出文本,通常提供最有用的信息。

查看群集见解

群集是否在 Azure 门户中创建,它是否可见? 如果属实,则可以生成群集见解,以帮助你进行故障排除。 若要访问此功能,请执行以下步骤:

  1. 在Azure 门户中,搜索并选择“Kubernetes 服务”。

  2. 选择 AKS 群集的名称。

  3. 在 AKS 群集页的导航窗格中,选择“ 诊断并解决问题”。

  4. “诊断并解决问题 ”页中,选择“ 群集见解” 链接。 群集见解工具会分析群集,然后在“群集见解”页的“观察结果和解决方案”部分中提供其发现结果的列表。

  5. 选择其中一项发现,查看有关问题及其可能的解决方案的详细信息。

查看Azure 门户中的资源

在Azure 门户中,可能需要查看在生成群集时创建的资源。 通常,这些资源位于从 MC_开始的资源组中。 托管群集资源组的名称可能MC_MyResourceGroup_MyManagedCluster_<location-code>。 但是,如果使用自定义托管群集资源组生成群集,则名称可能有所不同。

若要查找资源组,请在Azure 门户中搜索并选择“资源组”,然后选择在其中创建群集的资源组。 资源列表显示在资源组的 “概述 ”页中。

警告

建议不要修改 MC_ 资源组中的资源。 此操作可能会对 AKS 群集造成不必要的影响。

若要查看虚拟机规模集的状态,可以在资源组的资源列表中选择规模集名称。 它可能 具有类似于aks-nodepool1-12345678-vmss 的名称,并且其 Type 值为 虚拟机规模集。 规模集的状态显示在节点池的“概述”页顶部,更多详细信息显示在Essentials标题中。 如果部署不成功,则显示的状态为 “失败”。

对于所有资源,可以查看详细信息,以便更好地了解部署失败的原因。 对于规模集,可以选择“ 失败 状态”文本以查看有关失败的详细信息。 详细信息位于包含“状态”、“级别”和“代码”列的行中。 以下示例显示了一行列值。

Column 示例值
状态 预配失败
级别 错误
代码 ProvisioningState/failed/VMExtensionProvisioningError

选择行以查看 “消息” 字段。 这包含有关该失败的详细信息。 例如,示例行的 “Message” 字段以以下文本开头:

VM 在处理扩展“vmssCSE”时报告失败。 错误消息:“启用失败: 无法执行命令: 命令终止,退出状态=50 [stdout] [stderr] 0 0 0 --:

掌握此信息后,可以得出规模集中 VM 失败并生成退出状态 50 的结论。

注意

如果群集部署未达到创建这些资源的点,则可能无法查看Azure 门户中的托管群集资源组。

使用 Kubectl 命令

有关帮助排查群集错误的另一个选项,请输入 kubectl 命令以获取有关群集中部署的资源的详细信息。 若要使用 kubectl,请先登录到 AKS 群集:

az aks get-credentials --resource-group MyResourceGroup --name MyManagedCluster

根据故障的类型和发生时间,可能无法登录到群集以获取更多详细信息。 但通常,如果群集已创建并显示在Azure 门户中,则应能够登录并运行 kubectl 命令。

查看群集节点 (kubectl get 节点)

若要获取更多详细信息以确定节点的状态,请通过输入 kubectl get nodes 命令查看群集节点。 在此示例中,群集中没有节点报告:

$ kubectl get nodes

No resources found

查看系统命名空间中的 pod (kubectl get pod)

查看 kube-system 命名空间中的 Pod 也是解决问题的好方法。 使用此方法可以查看 Kubernetes 系统 Pod 的状态。 在此示例中,我们输入 kubectl get pods 命令:

$ kubectl get pods -n kube-system
NAME                                  READY   STATUS    RESTARTS   AGE
coredns-845757d86-7xjqb               0/1     Pending   0          78m
coredns-autoscaler-5f85dc856b-mxkrj   0/1     Pending   0          77m
konnectivity-agent-67f7f5554f-nsw2g   0/1     Pending   0          77m
konnectivity-agent-8686cb54fd-xlsgk   0/1     Pending   0          65m
metrics-server-6bc97b47f7-dfhbr       0/1     Pending   0          77m

描述 pod 的状态 (kubectl 描述 pod)

通过描述 Pod 的状态,可以查看配置详细信息以及 Pod 上发生的任何事件。 运行 kubectl describe pod 命令:

$ kubectl describe pod coredns-845757d86-7xjqb -n kube-system
Name:                 coredns-845757d86-7xjqb
Namespace:            kube-system
Priority:             2000001000
Priority Class Name:  system-node-critical
Node:                 <none>
Labels:               k8s-app=kube-dns
                      kubernetes.io/cluster-service=true
                      pod-template-hash=845757d86
                      version=v20
...
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  24m (x1 over 25m)   default-scheduler  no nodes available to schedule pods
  Warning  FailedScheduling  29m (x57 over 84m)  default-scheduler  no nodes available to schedule pods

在命令输出中,可以看到 Pod 无法部署到节点,因为没有可用的节点。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。