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

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

Prerequisites

查看 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 门户中搜索并选择 资源组 ,然后选择在其中创建群集的资源组。 资源列表显示在资源组的 “概述 ”页上。

Warning

建议不要修改 MC_ 资源组中的资源。 此操作可能会对您的 AKS 群集产生不必要的负面影响。

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

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

Column 示例值
Status 预配失败
Level Error
Code ProvisioningState/failed/VMExtensionProvisioningError

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

VM 在处理扩展“vmssCSE”时报告了失败。 错误消息:“启用失败:无法执行命令:命令终止,退出状态为 50 [stdout] [stderr] 0 0 0 --:有了这些信息,你可以得出结论,规模集中的虚拟机失败并且产生退出状态 50。

使用 Kubectl 命令

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

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

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

查看群集节点(kubectl 获取节点)

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

$ kubectl get nodes

No resources found

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

查看 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

使用 kubectl describe pod 命令查看 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反馈社区提交产品反馈。