本文概述了无法成功启动 Microsoft Azure Kubernetes 服务(AKS)群集时使用的基本故障排除方法。
Prerequisites
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 门户中搜索并选择 资源组 ,然后选择在其中创建群集的资源组。 资源列表显示在资源组的 “概述 ”页上。
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反馈社区提交产品反馈。