排查 Azure Stack Hub 上的 Azure Kubernetes 服务 故障

Azure Kubernetes 服务 (AKS)群集的故障排除与大多数 Kubernetes 群集的故障排除没有什么不同。 有关详细信息,请参阅 Kubernetes 站点故障排除。 Azure Stack Hub 中另一个有用的资源是 Azure Stack Hub 用户门户 AKS 群集边栏中提供的诊断设置

用于收集 Kubernetes 日志的诊断设置

在此页中,你可以收集有关以下信息:

  • kube-apiserver
  • kube-audit
  • kube-audit-admin
  • kube-controller-manager
  • Kube调度器
  • AllMetrics

从群集节点收集日志

若要排查某些 AKS 群集问题,可能需要直接从群集节点收集日志。 使用GitHub存储库 msazurestackworkloads/azurestack-gallery 中的脚本从群集节点收集日志。 如果没有这些脚本,则需要连接到群集中的每个节点,并手动找到并下载日志。

这些脚本简化了 Kubernetes 群集中相关日志的收集。 该脚本会自动创建群集的快照,并连接到每个节点以收集日志。 此外,脚本还可以选择将收集的日志上传到存储帐户。

此工具专为Microsoft支持团队设计,用于收集全面的群集日志。

脚本要求

  • 确保控制平面节点的网络安全组(NSG)公开 SSH 端口 22。
  • 可访问你的 Kubernetes 集群的计算机,或你用于部署集群的同一台计算机。 对于Windows计算机,请安装 Git Bash 以运行 bash 脚本。
  • Azure CLI安装在运行脚本的计算机上。 确保你可以从该计算机使用 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-system 容器元数据和日志。
  • kubelet 状态和日志。
  • etcd 状态和日志。
  • docker 状态和日志。
  • 容器状态和日记。
  • kube-system 快照。
  • Azure CNI 配置文件。
  • kubelet 配置文件。

该脚本检索Windows节点的更多日志:

  • c:\Azure\CustomDataSetupScript.log日志文件 。
  • kube-proxy 状态和日志。
  • 容器状态和日记。
  • azure-vnet 日志和 azure-vnet-telemetry 日志。
  • Docker 的 ETW 事件。
  • Hyper-V 的 ETW 事件。
  • Azure CNI 配置文件。

Parameters

参数 Description Required Example
-h、--help 打印命令的用法。 no
-u,--user 群集 VM 的管理员用户名。 yes azureuser (默认值)
-i、 --identity-file SA 私钥绑定到用于创建 Kubernetes 群集(有时名为“id_rsa”)的公钥。 yes /rsa.pem (Putty)
~/.ssh/id_rsa (SSH)
-g、--resource-group Kubernetes 群集资源组。 对于 AKS 服务创建的群集,托管资源组名称遵循模式“MC_RESOURCEGROUP_CLUSTERNAME_LOCTION”。 yes k8sresourcegroup
MC_AKSRP_k8scluster1_redmond
-n、--user-namespace 从指定命名空间中的容器收集日志。 如果未指定,将收集来自所有命名空间的日志。 no monitoring
--upload-logs 将检索到的日志持久保存到 Azure Stack Hub 的存储帐户中。 可以在 KubernetesLogs 资源组中找到日志。 no
--api-model 将 apimodel.json 文件持久保存在 Azure Stack Hub 存储帐户中。 仅当还提供了 --upload-logs 参数时,才会将 apimodel.json 文件上传到存储帐户。 no ./apimodel.json
--disable-host-key-checking 在脚本执行时,将 SSH 的 StrictHostKeyChecking 选项设置为“no”。 仅在安全环境中使用。 no

示例

# 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

后续步骤

了解如何使用 Azure Stack Hub 上的 AKS