从 AKS 群集中的 Windows 节点捕获 Windows 容器转储文件
如果 Windows 容器在 Microsoft Azure Kubernetes 服务 (AKS) 群集上发生故障,则可能需要检查 Windows 容器转储文件以调查根本原因。 本文提供从 AKS 群集中的 Windows 节点捕获 Windows 容器转储文件的步骤。 它还包括将转储文件下载到本地计算机以供进一步分析的说明。
先决条件
在之后
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 反馈社区提交产品反馈。