从 AKS 群集中的 Windows 节点捕获 Windows 容器转储文件

如果 Windows 容器在 Microsoft Azure Kubernetes 服务 (AKS) 群集上发生故障,则可能需要检查 Windows 容器转储文件以调查根本原因。 本文提供从 AKS 群集中的 Windows 节点捕获 Windows 容器转储文件的步骤。 它还包括将转储文件下载到本地计算机以供进一步分析的说明。

先决条件

  • AKS 群集。 如果没有 AKS 群集,请使用 Azure CLI 或通过 Azure 门户创建一个

  • 在之后 3/13/2024 创建的 Windows 代理池或升级到 AKS Windows 映像版本 20240316 或更高版本的节点映像。 或者,验证 WindowsCSEScriptsPackage 版本是 v0.0.39 或更高版本,可以位于 C:\AzureData\CustomDataSetupScript.log Windows 节点上。

步骤 1:向部署添加批注元数据

在容器中装载主机文件夹,并添加注释元数据,以请求 Windows 容器将转储文件存储在指定的文件夹中:

metadata:
  ...
  annotations:
    "io.microsoft.container.processdumplocation": "C:\\CrashDumps\\{container_id}"
    "io.microsoft.wcow.processdumptype": "mini"
    "io.microsoft.wcow.processdumpcount": "10"
spec:
  ...
  containers:
  - name: containername
    image: ...
    ...
    volumeMounts:
      - mountPath: C:\CrashDumps
        name: local-dumps
  volumes:
  - name: local-dumps
    hostPath:
      path: C:\k\containerdumps
      type: DirectoryOrCreate

步骤 2:重现问题

重新部署,并等待 Windows 容器失败。 可以使用 kubectl describe pod -n [POD-NAMESPACE] [POD-NAME] 了解托管 Pod 的 AKS Windows 节点。

步骤 3:连接到 Windows 节点

建立与 AKS 群集节点的连接。 使用安全外壳 (SSH) 密钥或远程桌面协议中的 Windows 管理员密码 (RDP) 连接进行身份验证。 这两种方法都需要创建中间连接。 这是因为当前无法直接连接到 AKS Windows 节点。 无论是通过 SSH 还是 RDP 连接到节点,必须指定 AKS 节点的用户名。 默认情况下,此用户名为 azureuser

如果你有 SSH 密钥, 请创建与 Windows 节点的 SSH 连接。 SSH 密钥不会保留在 AKS 节点上。 在以下任一操作期间,SSH 密钥将还原为最初安装在群集上的密钥:

  • Restart
  • 版本升级
  • 节点映像升级

步骤 4:在本地传输转储文件

容器发生故障后,确定帮助程序 Pod,以便在本地复制转储文件。 打开第二个控制台,然后通过运行 kubectl get pods 命令获取 Pod 列表,如下所示:

kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
azure-vote-back-6c4dd64bdf-m4nk7                        1/1     Running   2          3d21h
azure-vote-front-85b4df594d-jhpzw                       1/1     Running   2          3d21h
node-debugger-aks-nodepool1-38878740-vmss000000-6ztp6   1/1     Running   0          3m58s

帮助程序 Pod 的 node-debugger-aks前缀为 ,如第三行所示。 替换 pod 名称,然后运行以下安全复制 (scp) 命令,检索在容器发生故障时保存的转储文件 (.dmp) :

scp -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.97:/C:/k/containerdumps/{container_id}/{application}.dmp .

可以列出文件夹, C:\k\containerdumps 以在连接到 Windows 节点后查找转储文件的完整路径。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。