AKS 群集启动问题的基本故障排除
本文概述了无法成功启动Microsoft Azure Kubernetes 服务(AKS)群集时使用的基本故障排除方法。
先决条件
Azure CLI (版本 2.0.59 或更高版本)。
Kubernetes kubectl 工具。 若要使用 Azure CLI 安装 kubectl,请运行 az aks install-cli 命令。
查看 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 门户中的活动日志列表,请搜索活动日志。 或者,选择“通知”(钟形图标),然后选择活动日志中的“更多事件”。
活动日志页上的日志列表包含一个行条目,其中操作名称列值名为“启动托管群集”。 由列值启动的相应事件设置为工作或学校帐户的名称。 如果操作成功,“ 状态 ”列值将显示 “已接受”。
如果发生错误,该怎么办? 在这种情况下,“ 启动托管群集 操作 状态 ”字段显示 “失败”。 与在创建群集组件的操作中不同,此处必须展开失败的操作条目以查看子操作条目。 典型的子操作名称是策略操作,例如 “audit”策略操作 和 “auditIfNotExists”策略操作。 某些子操作将继续表明它们已成功。
若要进一步调查,可以选择其中一个失败的子操作。 此时会打开侧窗格,以便可以查看有关子操作的详细信息。 可以对“摘要”、“JSON”和“更改历史记录”等字段的值进行故障排除。 JSON 字段包含 JSON 格式的错误输出文本,并且通常提供最有用的信息。
查看群集见解
还可以生成群集见解,以帮助你通过“诊断”和“解决Azure 门户”边栏选项卡进行故障排除。 若要访问此功能,请执行以下步骤:
在Azure 门户中,搜索并选择 Kubernetes 服务。
选择 AKS 群集的名称。
在 AKS 群集页面的导航窗格中,选择“ 诊断”并解决问题。
在“ 诊断并解决问题 ”页上,选择“ 群集见解 ”链接。 群集见解工具分析群集,然后在“群集见解”页的“观察和解决方案”部分提供其发现列表。
选择其中一项结果,查看有关问题及其可能解决方案的详细信息。
查看Azure 门户中的资源
在Azure 门户中,可能需要查看在生成群集时创建的资源。 通常,这些资源位于以MC_开头的资源组中。 托管群集资源组的名称(如 MC_MyResourceGroup_MyManagedCluster_location-code>)。< 但是,如果使用自定义管理的群集资源组生成群集,则名称可能有所不同。
若要查找资源组,请在Azure 门户中搜索并选择资源组,然后选择在其中创建群集的资源组。 资源列表显示在资源组的“ 概述 ”页上。
警告
建议不要修改MC_资源组中的资源。 此操作可能会导致 AKS 群集产生不必要的影响。
若要查看虚拟机规模集的状态,可以在资源组的资源列表中选择规模集名称。 它的名称可能与 aks-nodepool1-12345678-vms 和虚拟机规模集的类型值类似。 规模集的状态显示在节点池的“概述”页顶部,“概要”标题中显示了更多详细信息。 如果部署失败,则显示的状态为 “失败”。
对于所有资源,可以查看详细信息,以更好地了解部署失败的原因。 对于规模集,可以选择 “失败 ”状态文本以查看有关失败的详细信息。 详细信息位于包含“状态”、“级别”和“代码”列的行中。 以下示例显示了列值的行。
列 | 示例值 |
---|---|
Status | 预配失败 |
Level | 错误 |
代码 | 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 获取节点)
若要获取更多详细信息以确定节点的状态,请通过输入 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
描述 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 反馈社区。