排查 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.azure.com \
    --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

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

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

操作员可能将生成的日志与 Microsoft 支持人员可能需要的其他系统日志相结合。 操作员可能将它们提供给 Microsoft。

可以通过以下几种方式提供 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 内容。

后续步骤