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

故障排除概述

在大多数情况下,对 Azure Kubernetes 服务 (AKS) 群集进行故障排除与对大多数 Kubernetes 群集进行故障排除没有什么不同。 可以在 Kubernetes 站点上找到相关信息:故障排除。 你可能会发现 Azure Stack Hub 中有用的另一个资源是“诊断设置”,它位于 Azure Stack Hub 用户门户“AKS 群集”边栏选项卡中 。

Diagnostic Settings to collect Kubernetes logs

在此边栏选项卡中,可以收集有关以下内容的信息:

  • 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

后续步骤

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