AKS 群集启动问题的基本故障排除

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

先决条件

查看 Azure CLI 中的错误

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

$ az aks start --resource-group myResourceGroup --name MyManagedCluster

(VMExtensionProvisioningError) Unable to establish outbound connection from agents, please see https://learn.microsoft.com/en-us/troubleshoot/azure/azure-kubernetes/error-code-outboundconnfailvmextensionerror and https://aka.ms/aks-required-ports-and-addresses for more information.  
Details: instance 3 has extension error details : {vmssCSE error messages : {vmssCSE exit status=50, output=AGE_SHA=sha-16fd35

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

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

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

“活动日志”页上的日志列表包含一个行条目,其中“操作名称”列值名为“启动托管群集”。 由列值 启动的相应事件 设置为工作或学校帐户的名称。 如果操作成功,“ 状态” 列值将显示“ 已接受”。

AKS 群集活动日志边栏选项卡的屏幕截图,其中显示了失败的启动操作。

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

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

AKS 群集活动日志的子操作侧窗格的屏幕截图,其中显示了启动操作失败的原因。

查看群集见解

还可以生成群集见解,以帮助通过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

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

VM 在处理扩展“vmssCSE”时报告失败。 错误消息:“启用失败:无法执行命令:命令终止,退出状态=50 [stdout] [stderr] 0 0 0 --:使用此信息,可以得出结论,规模集中的 VM 失败,生成的退出状态为 50。

使用 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 反馈社区提交产品反馈。