排除 Kubernetes 部署到 Azure Stack Hub 的问题

注释

仅使用 Kubernetes Azure Stack Hub 市场项部署群集作为概念证明。 对于 Azure Stack Hub 上支持的 Kubernetes 群集,请使用 AKS 引擎

本文介绍如何排查 Kubernetes 群集问题。 若要开始故障排除,请查看部署所需的元素。 可能需要从 Azure Stack Hub 或托管 Kubernetes 的 Linux VM 收集部署日志。 若要从管理终结点检索日志,请联系 Azure Stack Hub 管理员。

Kubernetes 部署概述

在对群集进行故障排除之前,请查看 Azure Stack Hub Kubernetes 群集部署过程。 部署使用 Azure 资源管理器解决方案模板创建虚拟机并为您的群集安装AKS-Engine。

Kubernetes 部署工作流

下图显示了部署群集的一般过程。

部署 Kubernetes 进程

部署步骤

  1. 从市场项收集输入参数。

    输入设置 Kubernetes 群集所需的值,包括:

    • 用户名:属于 Kubernetes 群集和 DVM 的 Linux 虚拟机(VM)的用户名。
    • SSH 公钥:用于授权作为 Kubernetes 群集和 DVM 一部分创建的所有 Linux 计算机的密钥。
    • 服务主体:Kubernetes Azure 云提供商使用的 ID。 创建服务主体时,客户端 ID 被识别为应用程序 ID。
    • 客户端密码:创建服务主体时创建的密钥。
  2. 创建部署 VM 和自定义脚本扩展。

    • 使用市场 Linux 映像 Ubuntu Server 16.04 LTS 创建部署 Linux VM。
    • 从市场下载并运行自定义脚本扩展。 该脚本是 适用于 Linux 2.0 的自定义脚本
    • 运行 DVM 自定义脚本。 该脚本执行以下任务:
      1. 从 Azure 资源管理器元数据终结点获取库终结点。
      2. 从 Azure 资源管理器元数据终结点获取 Active Directory 资源 ID。
      3. 加载 AKS 引擎的 API 模型。
      4. 将 AKS 引擎部署到 Kubernetes 群集,并将 Azure Stack Hub 云配置文件保存到 /etc/kubernetes/azurestackcloud.json
  3. 创建主 VM。

  4. 下载并运行自定义脚本扩展。

  5. 运行主脚本。

    该脚本执行以下任务:

    • 安装 etcd、Docker 和 Kubernetes 资源,例如 kubelet。 etcd 是一种分布式键值存储,提供在计算机群集中存储数据的方法。 Docker 支持最低限度的作系统级虚拟化,称为容器化技术。 Kubelet 是在每个 Kubernetes 节点上运行的节点代理。
    • 设置 etcd 服务。
    • 设置 kubelet 服务。
    • 启动 kubelet。 此任务涉及以下步骤:
      1. 启动 API 服务。
      2. 启动控制器服务。
      3. 启动调度器服务。
  6. 创建代理 VM。

  7. 下载并运行自定义脚本扩展。

  8. 运行代理脚本。 代理自定义脚本执行以下任务:

    • 安装 etcd
    • 设置 kubelet 服务。
    • 加入 Kubernetes 群集。

Kubernetes 故障排除的步骤

可以在支持 Kubernetes 群集的 VM 上收集和查看部署日志。 与 Azure Stack Hub 管理员联系,验证需要使用的 Azure Stack Hub 版本,以及从与部署相关的 Azure Stack Hub 获取日志。

  1. 在部署群集的资源组的 部署 面板中查看 ARM 部署返回的错误代码。 错误代码的说明位于 AKS 引擎 GitHub 存储库中的 故障排除 文章中。 如果无法解决错误说明的问题,请继续执行这些步骤。
  2. 查看 部署状态 ,并从 Kubernetes 群集中的控制平面节点检索日志。
  3. 检查是否使用的是最新版本的 Azure Stack Hub。 如果不确定使用的是哪个版本,请联系 Azure Stack Hub 管理员。
  4. 检查您的 VM 创建文件。 你可能遇到以下问题:
    • 公钥可能无效。 查看创建的密钥。
    • VM 创建可能已触发内部错误或触发创建错误。 许多因素可能会导致错误,包括 Azure Stack Hub 订阅的容量限制。
    • 确保 VM 的完全限定的域名 (FQDN) 以重复的前缀开头。
  5. 如果 VM 正常,则评估 DVM。 如果 DVM 有错误消息:
    • 公钥可能无效。 查看创建的密钥。
    • 请联系 Azure Stack Hub 管理员,使用特权终结点检索 Azure Stack Hub 的日志。 有关详细信息,请参阅 Azure Stack Hub 诊断工具
  6. 如果对部署有疑问,可以发布该部署,或者查看某人是否已在 Azure Stack Hub 论坛中回答过该问题。

查看部署状态

部署 Kubernetes 群集时,可以查看部署状态,检查是否存在任何问题。

  1. 打开 Azure Stack Hub 门户 https://portal.local.azurestack.external

  2. 选择 资源组,然后选择部署 Kubernetes 群集时使用的资源组的名称。

  3. 选择 “部署”,然后选择 “部署名称”。

    Kubernetes 故障排除:选择部署

  4. 咨询故障排除窗口。 每个已部署的资源都提供以下信息:

    资产 DESCRIPTION
    资源 资源的名称。
    类型 资源提供者和资源类型。
    状态 项目的状态。
    时间戳 时间的 UTC 时间戳。
    操作详细信息 操作详情,例如参与操作的资源提供者、资源终端点和资源的名称。

    每个项目都有一个绿色或红色的状态图标。

查看部署日志

如果 Azure Stack Hub 门户没有提供足够的信息来排查或克服部署失败,下一步是深入了解群集日志。 若要手动检索部署日志,通常需要连接到群集的主 VM 之一。 更简单的替代方法是下载并运行 Azure Stack Hub 团队提供的以下 Bash 脚本 。 此脚本连接到 DVM 和群集的 VM,收集相关的系统和群集日志,并将其下载回工作站。

先决条件

在用于管理 Azure Stack Hub 的计算机上需要 Bash 提示符。 在 Windows 计算机上,可以通过安装 Git for Windows 获取 Bash 提示符。 安装后,在开始菜单中查找 Git Bash

检索日志

按照以下步骤收集和下载群集日志:

  1. 打开 Bash 提示符。 在 Windows 计算机上打开 Git Bash 或运行: C:\Program Files\Git\git-bash.exe

  2. 通过在 Bash 提示符中运行以下命令下载日志收集器脚本:

    mkdir -p $HOME/kuberneteslogs
    cd $HOME/kuberneteslogs
    curl -O https://raw.githubusercontent.com/msazurestackworkloads/azurestack-gallery/master/diagnosis/getkuberneteslogs.sh
    chmod 744 getkuberneteslogs.sh
    
  3. 查找脚本所需的信息并运行它:

    参数 DESCRIPTION 示例:
    -d、--vmd-host DVM 的公共 IP 或完全限定的域名 (FQDN)。 VM 名称以 vmd-. 开头。 IP:192.168.102.38
    DNS:vmd-myk8s.local.cloudapp.azurestack.external
    -h、--help 打印命令用法。
    -i、--identity-file 创建 Kubernetes 群集时传递给市场项的 RSA 私钥文件的路径。 需要远程连接到 Kubernetes 节点。 C:\data\id_rsa.pem (Putty)
    ~/.ssh/id_rsa (SSH)
    -m、--master-host Kubernetes 控制平面节点的公共 IP 或完全限定的域名 (FQDN)。 VM 名称以 k8s-master-. 开头。 IP:192.168.102.37
    FQDN:k8s-12345.local.cloudapp.azurestack.external
    -u、--user 创建 Kubernetes 群集时,传递给市场项的用户名。 需要远程连接到 Kubernetes 节点。 azureuser (默认值)

    添加参数值时,命令可能类似于以下示例:

    ./getkuberneteslogs.sh --identity-file "C:\id_rsa.pem" --user azureuser --vmd-host 192.168.102.37
    
  4. 几分钟后,脚本会将收集的日志输出到名为 KubernetesLogs_{{time-stamp}}的目录。 你将找到属于群集的每个 VM 的目录。

    日志收集器脚本还会在日志文件中查找错误,并在发现已知问题时包括故障排除步骤。 请确保运行最新版本的脚本,以增加发现已知问题的机会。

注释

请查看此 GitHub 存储库 ,了解有关日志收集器脚本的更多详细信息。

后续步骤

将 Kubernetes 部署到 Azure Stack Hub

将 Kubernetes 群集添加到市场(适用于 Azure Stack Hub 操作员)