AKS 群集创建问题的基本故障排除
本文概述了无法成功创建或部署 Microsoft Azure Kubernetes 服务 (AKS) 群集时使用的基本故障排除方法。
先决条件
Azure CLI (版本 2.0.59 或更高版本)。
Kubernetes kubectl 工具。 若要使用 Azure CLI 安装 kubectl,请运行 az aks install-cli 命令。
查看 Azure CLI 中的错误
如果尝试使用 Azure CLI 创建群集时操作失败,输出会显示错误信息。 下面是一个示例 Azure CLI 命令和输出:
# Create a cluster specifying subnet
az aks create --resource-group myResourceGroup
--name MyManagedCluster \
--load-balancer-sku standard \
--vnet-subnet-id /subscriptions/<subscriptions-id>/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
可以从输出中识别错误代码和错误消息。 在这种情况下,它们是:
- 错误代码:
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
.
这些说明通常包含群集创建中出错的详细信息,并链接到包含更多详细信息的文章。 此外,可以根据 Azure CLI 操作生成的错误,使用我们的故障排除文章作为参考。
在Azure 门户中查看错误详细信息
若要调查Azure 门户中的 AKS 群集创建错误,请打开活动日志。 可以筛选结果以满足你的需求。 为此,请选择“ 添加筛选器”以向筛选器 添加更多属性。
在“活动日志”页上,找到“操作名称”列显示“创建”或“更新托管群集”的日志条目。
列启动的事件显示执行操作的用户(可以是工作帐户、学校帐户或 Azure 托管标识)。
如果操作成功,则状态列值为“接受”。 你还将看到用于创建群集组件的子操作条目,例如以下操作名称:
- 创建或更新路由表
- 创建或更新网络安全组
- 更新用户分配的标识创建
- 创建或更新负载均衡器
- 创建或更新公共 IP 地址
- 创建角色分配
- 更新资源组
在这些子操作条目中,“状态”值为“成功”,字段启动的事件将设置为 AzureContainerService。
如果发生错误,该怎么办? 在这种情况下,状态值为“失败”。 与在创建群集组件的操作中不同,必须展开失败的子操作条目才能查看它们。 典型的子操作名称是策略操作,例如 “audit”策略操作 和 “auditIfNotExists”策略操作。 并非所有子操作都一起失败。 你会看到其中一些成功。
选择其中一个失败的子操作以进一步调查它。 选择 “摘要”、“ JSON”和 “更改历史记录 ”选项卡以解决问题。 JSON 选项卡包含 JSON 格式的错误输出文本,通常提供最有用的信息。
下面是 JSON 格式的详细日志示例:
{
"status": {
"value": "Failed",
"localizedValue": "Failed"
},
"subStatus": {
"value": "",
"localizedValue": ""
},
"submissionTimestamp": "2024-08-30T10:06:07Z",
"subscriptionId": "<subscriptionId>",
"tenantId": "<tenantId>",
"properties": {
"statusMessage": "{\"status\":\"Failed\",\"error\":{\"code\":\"ResourceOperationFailure\",\"message\":\"The resource operation completed with terminal provisioning state 'Failed'.\",\"details\":[{\"code\":\"VMExtensionProvisioningError\",\"message\":\"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.\"}]}}",
}
}
查看群集见解
群集是否在Azure 门户中创建,是否可见? 如果这是真的,可以生成有助于进行故障排除的群集见解。 若要访问此功能,请执行以下步骤:
在Azure 门户中,搜索并选择 Kubernetes 服务。
选择 AKS 群集的名称。
在 AKS 群集页面的导航窗格中,选择“ 诊断”并解决问题。
在“ 诊断并解决问题 ”页中,选择“ 群集见解 ”链接。 群集见解工具分析群集,然后在“群集见解”页的“观察和解决方案”部分提供其发现列表。
选择其中一项结果,查看有关问题及其可能解决方案的详细信息。
查看Azure 门户中的资源
在Azure 门户中,可能需要查看在生成群集时创建的资源。 通常,这些资源位于名称以 MC_ 开头的资源组中。 托管群集资源组的名称(如 MC_MyResourceGroup_MyManagedCluster_location-code>)。< 但是,如果使用自定义管理的群集资源组生成群集,则名称可能有所不同。
若要查找资源组,请在Azure 门户中搜索并选择资源组,然后选择在其中创建群集的资源组。 资源列表显示在资源组的“ 概述 ”页中。
警告
建议不要修改MC_资源组中的资源。 此操作可能会对 AKS 群集产生不利影响。
若要查看虚拟机规模集的状态,可以在资源组的资源列表中选择规模集名称。 它可能有类似于 aks-nodepool1-12345678-vmss 的名称值,并且它是虚拟机规模集的 Type 值。 规模集的状态显示在节点池的“概述”页顶部,“概要”标题中显示了更多详细信息。 如果部署失败,则显示的状态为 “失败”。
对于所有资源,可以查看详细信息,以更好地了解部署失败的原因。 对于规模集,可以选择 “失败 ”状态文本以查看有关失败的详细信息。 详细信息位于包含 “状态”、“ 级别”和 “代码 ”列的行中。 以下示例显示了列值的行。
列 | 示例值 |
---|---|
Status | 预配失败 |
Level | 错误 |
代码 | ProvisioningState/failed/VMExtensionProvisioningError |
选择该行以查看 “消息 ”字段。 这包含有关该失败的详细信息。 例如,示例行的消息字段以以下文本开头:
VM 在处理扩展“vmssCSE”时报告了失败。 错误消息:“启用失败: 无法执行命令: 命令终止,退出状态为 50 [stdout] [stderr] 0 0 0 --:
借助此信息,可以得出结论,规模集中的 VM 失败并生成退出状态 50。
注意
如果群集部署未到达创建这些资源的点,则可能无法查看Azure 门户中的托管群集资源组。
使用 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 pods
命令:
$ 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 反馈社区。