解决 Helm 出现几乎每个操作都超时的问题

221次阅读
没有评论

问题描述

在首次尝试设置 helm 时遇到了问题。在创建了一个拥有 cluster-admin 角色的帐户后,通过使用 helm init --service-account=tiller 初始化了全新的 helm tiller 。然而,当尝试安装某些内容时,出现了超时错误。

解决方案

请注意以下操作可能因版本差异而有所不同,操作前务必备份。

方案1 – 修复节点私有 IP 问题

问题的根本原因在于节点在注册到 kubeadm init 时向集群主节点提供了其私有 IP。这导致主节点试图访问以 192.0.*.* 开头的地址,这些地址在其视角中并未解析为节点。

为了解决这个问题,需要编辑节点上的 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件,并在其中的 --node-ip=<public-node-ip> 参数中指定节点的公共 IP。然后,重新加载服务并重启它。下面是具体的操作步骤:

  1. 使用适当的编辑器(如 vimnano)打开 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件。
  2. 在文件中找到 ExecStart= 行,该行以 ExecStart=/usr/bin/kubelet 开头。
  3. ExecStart= 行的末尾添加 --node-ip=<public-node-ip> 参数,将 <public-node-ip> 替换为节点的公共 IP 地址。
  4. 保存文件并关闭编辑器。
  5. 重新加载 kubelet 服务配置:运行 sudo systemctl daemon-reload
  6. 重启 kubelet 服务:运行 sudo systemctl restart kubelet

这样操作后,再次注册节点,问题应该得到解决。

方案2 – 添加节点名称到主节点的 /etc/hosts 文件

另一个解决方法是将节点的名称添加到主节点的 /etc/hosts 文件中,以便在全局 DNS 中解析节点名称。以下是具体步骤:

  1. 在主节点上,打开 /etc/hosts 文件以编辑。
  2. 在文件的末尾添加条目,将节点的名称映射到其公共 IP 地址,例如:<public-node-ip> <node-name>
  3. 保存文件并关闭编辑器。
  4. 如果没有安装 dnsmasq,可以选择安装(例如,运行 sudo apt install -y dnsmasq)。
  5. 在主节点上杀死 k8s api server 容器(kubelet 会重新创建它)。
  6. 重新启动 Docker 服务:运行 sudo systemctl restart docker 或重新启动主节点。

方案3 – 通过设置 HELM_HOST 解决

如果在使用 helm 时出现上述问题,可以尝试设置 HELM_HOST 环境变量为正确的值,以解决问题。以下是具体步骤:

  1. 打开终端窗口。
  2. 运行以下命令以设置 HELM_HOST 环境变量:
    bash
    export HELM_HOST=<proper values here>

    <proper values here> 替换为正确的值,可能是你主节点的公共 IP 地址。
  3. 尝试运行 helm 命令,查看是否仍然出现超时错误。

方案4 – 使用 dnsmasq 解决 DNS 解析问题(可选)

如果上述解决方案无法解决问题,你可以尝试使用 dnsmasq 来解决 DNS 解析问题。以下是具体步骤:

  1. 在主节点上安装 dnsmasq(例如,运行 sudo apt install -y dnsmasq)。
  2. 编辑 dnsmasq 的配置文件(通常为 /etc/dnsmasq.conf),添加以下行:
    server=/cluster.local/10.38.0.1
    10.38.0.1 替换为你的主节点 IP 地址。
  3. 保存文件并关闭编辑器。
  4. 重新启动 dnsmasq 服务:运行 sudo systemctl restart dnsmasq 或适当的命令,以便使配置生效。

方案5 – 检查 kubelet 权限

如果你依然遇到权限问题,你可以重新检查 kubelet 的权限。确保你的用户具有适当的权限来执行 pods/port-forwardlist pods 操作。你可以运行以下命令来验证权限:

kubectl auth can-i create pods/portforward
kubectl auth can-i list pods

如果返回结果表明你具有这些操作的权限,那么问题可能不在于权限。

方案6 – 参考相关讨论和解决方案

在解决此问题时,你可以参考相关的讨论和解决方案,如 Kubernetes 项目的 GitHub 页面、Stack Overflow 等。这些资源可能会提供其他的洞察和解决方法。

总结

通过修复节点私有 IP 问题、添加节点名称到主节点的 /etc/hosts 文件、设置 HELM_HOST 环境变量、使用 dnsmasq 解决 DNS 解析问题,或者检查 kubelet 权限,你应该能够解决 Helm 操作超时的问题。根据具体情况选择合适的解决方案,并在操作前做好备份以避免不必要的损失。

正文完