排查 Azure Stack Hub 上的 Azure Kubernetes 服务故障
故障排除概述
在大多数情况下,对 Azure Kubernetes 服务 (AKS) 群集进行故障排除与对大多数 Kubernetes 群集进行故障排除没有什么不同。 可以在 Kubernetes 站点上找到相关信息:故障排除。 你可能会发现 Azure Stack Hub 中有用的另一个资源是“诊断设置”,它位于 Azure Stack Hub 用户门户“AKS 群集”边栏选项卡中 。
在此边栏选项卡中,可以收集有关以下内容的信息:
- kube-apiserver
- kube-audit
- kube-audit-admin
- kube-controller-manager
- kube-scheduler
- AllMetrics
从群集节点收集日志
若要排查某些 AKS 群集问题,可能需要直接从群集节点收集日志。 可以使用 GitHub 存储 msazurestackworkloads/azurestack-gallery 中的脚本从群集节点收集日志。 如果没有这些脚本,需要连接到群集中的每个节点,手动查找并下载日志。
这些脚本旨在简化从 Kubernetes 群集收集相关日志。 该脚本将自动创建群集的快照,并连接到每个节点以收集日志。 此外,脚本还可以选择性地将收集的日志上传到存储帐户。
此工具专为 Microsoft 支持团队设计,用于收集全面的群集日志。
脚本要求
- 确保控制平面节点的网络安全组 (NSG) 公开了 SSH 端口 22。
- 有权访问 Kubernetes 群集的计算机或用于部署群集的同一台计算机。 对于 Windows 计算机,请安装 Git Bash 以运行 bash 脚本。
- 在将运行脚本的计算机中安装了 Azure CLI。 请确保可以从计算机中通过使用
Azure CLI
登录到 Azure Stack 环境。 有关如何安装和配置 Azure CLI 来管理 Azure Stack 云的信息,可在在 Azure Stack Hub 上安装 Azure CLI 上找到说明。 - 使用
az account set --subscription <Subscription ID>
切换到部署 Kubernetes 群集的订阅。 - 将最新版本的脚本下载到计算机,并提取脚本。
日志
此脚本可实现自动收集以下日志:
/var/log/azure/
目录中的日志文件/var/log/kubeaudit
目录中的日志文件(kube 审核日志)- 日志文件
/var/log/waagent.log
(waagent) - 日志文件
/var/log/azure/deploy-script-dvm.log
(如果使用 Azure Stack 的 Kubernetes 群集市场项进行部署) /etc/kubernetes/manifests
目录中的静态清单/etc/kubernetes/addons
目录中的静态加载项- Waagent 日志
- kube 系统容器元数据和日志
- Kubelet 状态和日志
- etcd 状态和日志
- Docker 状态和日志
- containerd 状态和日志
- kube 系统快照
- Azure CNI 配置文件
- kubelet 配置文件
为 Windows 节点检索了一些其他日志:
- 日志文件
c:\Azure\CustomDataSetupScript.log
- kube 代理状态和日志
- containerd 状态和日志
- azure-vnet log and azure-vnet-telemetry log
- Docker 的 ETW 事件
- Hyper-V 的 ETW 事件
- Azure CNI 配置文件
parameters
参数 | 说明 | 必需 | 示例 |
---|---|---|---|
-h、--help | 打印命令用法。 | 否 | |
-u、--user | 群集 VM 的管理员用户名。 | 是 | azureuser(默认值) |
-i、--identity-file | 与用于创建 Kubernetes 群集的公钥绑定的 SA 私钥(有时称为“id_rsa”)。 | 是 | /rsa.pem (Putty) ~/.ssh/id_rsa (SSH) |
-g, --resource-group | Kubernetes 群集资源组。 对于 AKS 服务创建的群集,托管资源组名称遵循模式“MC_RESOURCEGROUP_CLUSTERNAME_LOCTION”。 | 是 | k8sresourcegroup MC_AKSRP_k8scluster1_redmond |
-n、--user-namespace | 从指定命名空间中的容器收集日志。 如果未指定,则收集来自所有命名空间的日志。 | 否 | monitoring |
--upload-logs | 将检索的日志保存在 Azure Stack Hub 存储帐户中。 可在 KubernetesLogs 资源组中找到日志。 | 否 | |
--api-model | 将 apimodel.json 文件保存在 Azure Stack Hub 存储帐户中。 如果也提供了“--upload-logs”参数,则会将 apimodel.json 文件上传到存储帐户。 | 否 | ./apimodel.json |
--disable-host-key-checking | 在执行脚本时将 SSH 的 StrictHostKeyChecking 选项设置为“否”。 仅在安全环境中使用。 | 否 |
示例
# switch to the subscription where the Kubernetes cluster is deployed.
az account set --subscription <Subscription ID>
# download the scripts.
mkdir -p $HOME/kuberneteslogs
cd $HOME/kuberneteslogs
curl -L https://github.com/msazurestackworkloads/azurestack-gallery/releases/download/diagnosis-v1.1.0/diagnosis-v1.1.0.tar.gz -o diagnosis.tar.gz
tar xvf diagnosis.tar.gz
# use the script to collect logs
./getkuberneteslogs.sh -u azureuser -i private.key.1.pem -g k8s-rg
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg --disable-host-key-checking
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg -n default -n monitoring
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg --upload-logs --api-model clusterDefinition.json
./getkuberneteslogs.sh -u azureuser -i ~/.ssh/id_rsa -g k8s-rg --upload-logs
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈