注释
仅使用 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 群集所需的值,包括:
- 用户名:属于 Kubernetes 群集和 DVM 的 Linux 虚拟机(VM)的用户名。
- SSH 公钥:用于授权作为 Kubernetes 群集和 DVM 一部分创建的所有 Linux 计算机的密钥。
- 服务主体:Kubernetes Azure 云提供商使用的 ID。 创建服务主体时,客户端 ID 被识别为应用程序 ID。
- 客户端密码:创建服务主体时创建的密钥。
创建部署 VM 和自定义脚本扩展。
- 使用市场 Linux 映像 Ubuntu Server 16.04 LTS 创建部署 Linux VM。
- 从市场下载并运行自定义脚本扩展。 该脚本是 适用于 Linux 2.0 的自定义脚本。
- 运行 DVM 自定义脚本。 该脚本执行以下任务:
- 从 Azure 资源管理器元数据终结点获取库终结点。
- 从 Azure 资源管理器元数据终结点获取 Active Directory 资源 ID。
- 加载 AKS 引擎的 API 模型。
- 将 AKS 引擎部署到 Kubernetes 群集,并将 Azure Stack Hub 云配置文件保存到
/etc/kubernetes/azurestackcloud.json。
创建主 VM。
下载并运行自定义脚本扩展。
运行主脚本。
该脚本执行以下任务:
- 安装 etcd、Docker 和 Kubernetes 资源,例如 kubelet。 etcd 是一种分布式键值存储,提供在计算机群集中存储数据的方法。 Docker 支持最低限度的作系统级虚拟化,称为容器化技术。 Kubelet 是在每个 Kubernetes 节点上运行的节点代理。
- 设置 etcd 服务。
- 设置 kubelet 服务。
- 启动 kubelet。 此任务涉及以下步骤:
- 启动 API 服务。
- 启动控制器服务。
- 启动调度器服务。
创建代理 VM。
下载并运行自定义脚本扩展。
运行代理脚本。 代理自定义脚本执行以下任务:
- 安装 etcd。
- 设置 kubelet 服务。
- 加入 Kubernetes 群集。
Kubernetes 故障排除的步骤
可以在支持 Kubernetes 群集的 VM 上收集和查看部署日志。 与 Azure Stack Hub 管理员联系,验证需要使用的 Azure Stack Hub 版本,以及从与部署相关的 Azure Stack Hub 获取日志。
- 在部署群集的资源组的 部署 面板中查看 ARM 部署返回的错误代码。 错误代码的说明位于 AKS 引擎 GitHub 存储库中的 故障排除 文章中。 如果无法解决错误说明的问题,请继续执行这些步骤。
- 查看 部署状态 ,并从 Kubernetes 群集中的控制平面节点检索日志。
- 检查是否使用的是最新版本的 Azure Stack Hub。 如果不确定使用的是哪个版本,请联系 Azure Stack Hub 管理员。
- 检查您的 VM 创建文件。 你可能遇到以下问题:
- 公钥可能无效。 查看创建的密钥。
- VM 创建可能已触发内部错误或触发创建错误。 许多因素可能会导致错误,包括 Azure Stack Hub 订阅的容量限制。
- 确保 VM 的完全限定的域名 (FQDN) 以重复的前缀开头。
- 如果 VM 正常,则评估 DVM。 如果 DVM 有错误消息:
- 公钥可能无效。 查看创建的密钥。
- 请联系 Azure Stack Hub 管理员,使用特权终结点检索 Azure Stack Hub 的日志。 有关详细信息,请参阅 Azure Stack Hub 诊断工具。
- 如果对部署有疑问,可以发布该部署,或者查看某人是否已在 Azure Stack Hub 论坛中回答过该问题。
查看部署状态
部署 Kubernetes 群集时,可以查看部署状态,检查是否存在任何问题。
打开 Azure Stack Hub 门户
https://portal.local.azurestack.external。选择 资源组,然后选择部署 Kubernetes 群集时使用的资源组的名称。
选择 “部署”,然后选择 “部署名称”。
咨询故障排除窗口。 每个已部署的资源都提供以下信息:
资产 DESCRIPTION 资源 资源的名称。 类型 资源提供者和资源类型。 状态 项目的状态。 时间戳 时间的 UTC 时间戳。 操作详细信息 操作详情,例如参与操作的资源提供者、资源终端点和资源的名称。 每个项目都有一个绿色或红色的状态图标。
查看部署日志
如果 Azure Stack Hub 门户没有提供足够的信息来排查或克服部署失败,下一步是深入了解群集日志。 若要手动检索部署日志,通常需要连接到群集的主 VM 之一。 更简单的替代方法是下载并运行 Azure Stack Hub 团队提供的以下 Bash 脚本 。 此脚本连接到 DVM 和群集的 VM,收集相关的系统和群集日志,并将其下载回工作站。
先决条件
在用于管理 Azure Stack Hub 的计算机上需要 Bash 提示符。 在 Windows 计算机上,可以通过安装 Git for Windows 获取 Bash 提示符。 安装后,在开始菜单中查找 Git Bash 。
检索日志
按照以下步骤收集和下载群集日志:
打开 Bash 提示符。 在 Windows 计算机上打开 Git Bash 或运行:
C:\Program Files\Git\git-bash.exe通过在 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查找脚本所需的信息并运行它:
参数 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几分钟后,脚本会将收集的日志输出到名为
KubernetesLogs_{{time-stamp}}的目录。 你将找到属于群集的每个 VM 的目录。日志收集器脚本还会在日志文件中查找错误,并在发现已知问题时包括故障排除步骤。 请确保运行最新版本的脚本,以增加发现已知问题的机会。
注释
请查看此 GitHub 存储库 ,了解有关日志收集器脚本的更多详细信息。