排查 Azure Stack Hub 上的 AKS 引擎问题

部署或使用 Azure Stack Hub 上的 AKS 引擎时可能发现问题。 本文介绍了对 AKS 引擎的部署进行故障排除的步骤。 收集有关你的 AKS 引擎的信息,收集 Kubernetes 日志,并查看自定义脚本扩展错误代码。 还可以为 AKS 引擎创建 GitHub 问题。

注意

对于 AKSe 0.75.3 及更高版本,下面的 aks-engine 命令将以 aks-engine-azurestack 而不是 aks-engine 开头。

排查 AKS 引擎安装问题

如果之前的安装步骤失败,可以使用 GoFish 包管理器安装 AKS 引擎。 GoFish 将自己定义为跨平台的 Homebrew。

可以在此处找到使用 GoFish 安装 AKS 引擎的说明

收集节点和群集日志

可以通过检索节点和群集日志找到有关收集节点和群集日志的说明。

先决条件

本指南假设你已下载 Azure CLIAKS 引擎

本指南还假定你已使用 AKS 引擎部署了群集。 有关详细信息,请参阅使用 Azure Stack Hub 上的 AKS 引擎部署 Kubernetes 群集

检索日志

aks-engine get-logs 命令可用于排查群集问题。 此命令生成、收集一组文件并将其下载到工作站。 这些文件包括节点配置、群集状态和配置,以及设置日志文件。

命令的大致工作原理是:在每个节点中建立 SSH 会话,执行用于收集和压缩相关文件的日志收集脚本,并将 .ZIP 文件下载到本地计算机。

SSH 身份验证

需要一个有效的 SSH 私钥才能与群集 Linux 节点建立 SSH 会话。 Windows 凭据存储在 API 模型中,并将从此处加载。 将 windowsprofile.sshEnabled 设置为 true 以在 Windows 节点中启用 SSH。

向存储帐户容器上传日志

成功检索到群集日志后,AKS 引擎可将其保存在 Azure 存储帐户容器中(如果设置可选参数 --upload-sas-url)。 AKS 引擎要求容器名称是提供的 SAS URL 的一部分。 预期格式为 https://{blob-service-uri}/{container-name}?{sas-token}

注意

尚不支持使用 AD FS 标识提供程序的自定义云上的存储帐户。

节点无法加入群集

默认情况下,aks-engine get-logs 从成功加入群集的节点中收集日志。 若要从无法加入群集的 VM 收集日志,请设置标志 --vm-names

--vm-name k8s-pool-01,k8s-pool-02

aks-engine get-logs 的使用

假设你已部署群集,并且最初用于部署该群集的 API 模型存储在 _output/<dnsPrefix>/apimodel.json,则可以运行如下命令收集日志:

aks-engine get-logs \
    --location <location> \
    --api-model _output/<dnsPrefix>/apimodel.json \
    --ssh-host <dnsPrefix>.<location>.cloudapp.chinacloudapi.cn \
    --linux-ssh-private-key ~/.ssh/id_rsa

参数

参数 必需 说明
--location 群集资源组的 Azure 位置。
--api-model 为群集生成的 API 模型的路径。
--ssh-host 可以访问群集中所有节点的 SSH 侦听器的 FQDN 或 IP 地址。
--linux-ssh-private-key 可用于在群集 Linux 节点上创建远程会话的 SSH 私钥的路径。
--output-directory 输出目录,从 --api-model 派生(如果缺少)。
--control-plane-only 仅从控制平面节点收集日志。
--vm-names 仅收集指定 VM 中的日志(逗号分隔的名称)。
--upload-sas-url 用于上传收集的日志的 Azure 存储帐户 SAS URL。

查看自定义脚本扩展错误代码

AKS 引擎会针对每个 Ubuntu 服务器生成一个脚本,作为自定义脚本扩展 (CSE) 的资源以执行部署任务。 如果脚本引发错误,它将在 /var/log/azure/cluster-provision.log 中记录错误。 错误在门户中显示。 错误代码可能有助于解决问题。 有关 CSE 退出代码的详细信息,请参阅 cse_helpers.sh

向 Azure 支持工程师提供 Kubernetes 日志

如果在收集和检查日志后仍无法解决问题,则可能需要开始创建支持工单的过程,并提供你收集的日志。

操作员可以将生成的日志与 Azure 支持所需的其他系统日志合并。 操作员可以将这些日志提供给 Azure。

可以通过以下几种方式提供 Kubernetes 日志:

  • 可以与 Azure Stack Hub 操作员联系。 操作员使用存储在 .ZIP 文件中的日志中的信息来创建支持案例。
  • 如果你有可在其中上传 Kubernetes 日志的存储帐户的 SAS URL,你可通过 SAS URL 添加以下命令和标志,将日志保存到该存储帐户:
    aks-engine get-logs -upload-sas-url <SAS-URL>
    
    有关说明,请参阅向存储帐户容器上传日志
  • 如果你是云操作员,你可以:

提交 GitHub 问题

如果无法解决部署错误,可以提交 GitHub 问题。

  1. 在 AKS 引擎存储库中提交 GitHub 问题

  2. 使用以下格式添加标题:CSE 错误:exit code <INSERT_YOUR_EXIT_CODE>.

  3. 在问题中包含以下信息:

    • 用于部署群集的群集配置文件 apimodel.json。 在将其发布到 GitHub 之前,请删除所有机密和密钥。

    • 以下 kubectl 命令 get nodes 的输出

    • 来自未正常运行的节点的 /var/log/azure/cluster-provision.log 内容。

后续步骤