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

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

先决条件

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

  • 在升级为 AKS Windows 映像版本20240316或更高版本的节点映像之后3/13/2024创建的 Windows 代理池。 或者,验证 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 群集节点的连接。 在远程桌面协议(RDP)连接中使用安全外壳(SSH)密钥或 Windows 管理员密码进行身份验证。 这两种方法都需要创建中间连接。 这是因为当前无法直接连接到 AKS Windows 节点。 无论是通过 SSH 还是 RDP 连接到节点,必须指定 AKS 节点的用户名。 默认情况下,此用户名为 azureuser.

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

  • 重启
  • 版本升级
  • 节点映像升级

步骤 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 反馈社区