前言:

问题:k8s节点notready排错---Failed to construct kubelet dependencies

查找问题方式:

1,查看启动日志journalctl -u kubelet

2,系统日志cat /etc/kubernetes/kubelet.conf

找到问题,ca证书原因

我的解决办法是把另一个node的ca证书直接复制过来

scp /etc/kubernetes/pki/ca.crt  root@10.30.21.36:/etc/kubernetes/pki/

重启kbuelet

节点变为ready状态

问题解决

以下为实际解决问题的详细步骤

现象:kubeadm上显示node2节点无法监控,重启k8s还是无法监控,发现节点重启后是ready状态,过一段时间就变成notready

解决步骤

一,检查状态

[root@docker1 ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
docker1   Ready    control-plane,master   34d   v1.23.6
docker2   notReady    <none>                 34d   v1.23.6
docker3   Ready    <none>                 34d   v1.23.6

二,重启服务,让gpt检测node2的describe出的信息

二.1

直接查看节点二状态kubectl describe node docker2

发现有污点,开始检测是否为污点原因

看起来移除污点的命令已经成功执行,但是节点 docker2 上的 node.kubernetes.io/unreachable:NoExecute 污点仍然存在。这可能是由于节点状态或其他问题导致的。您可以尝试以下方法来排查问题并尝试移除污点:

  1. 检查节点状态:确保节点 docker2 的状态正常,没有其他问题导致污点无法移除。您可以使用以下命令查看节点的详细信息和状态:

复制kubectl describe node docker2

查看节点的详细信息,包括事件和条件,以确定是否有其他问题影响了污点的移除。

  1. 重试移除污点:您可以尝试再次执行移除污点的命令,确保没有错误消息返回:

复制kubectl taint nodes docker2 node.kubernetes.io/unreachable:NoExecute-

如果再次执行移除污点的命令后仍然没有成功,可能需要进一步排查节点状态和事件,以确定问题的根本原因。

  1. 重启 kubelet 服务:有时候重启 kubelet 服务可以帮助解决节点状态的问题。您可以尝试在节点 docker2 上重启 kubelet 服务:

复制systemctl restart kubelet

请注意,重启 kubelet 服务可能会导致节点上正在运行的 Pod 重新调度,因此请谨慎操作。

发现其实node2没加过污点,这个node.kubernetes.io/unreachable:NoExecute-意思是没连接上node2

二.2查看日志

1,看粗略日志

在节点二上查看k8s日志journalctl -f -u kubelet.service   ,cat /etc/kubernetes/kubelet.conf

发现Failed to construct kubelet dependencies

2,根据报错看详细日志

查看k8s配置cat /etc/kubernetes/kubelet.conf或者/var/log/syslog

检测到是证书问题

根据您提供的日志信息,kubelet 服务在节点 node1 上启动失败的原因是无法加载客户端 CA 文件 /etc/kubernetes/pki/ca.crt,因为该文件不存在。这导致 kubelet 无法构建必要的依赖项而无法正常启动。为了解决这个问题,您可以按照以下步骤操作:

  1. 创建客户端 CA 文件

    • 检查您的 Kubernetes 集群中是否存在客户端 CA 文件 /etc/kubernetes/pki/ca.crt。如果该文件确实不存在,您可以尝试重新生成客户端 CA 文件。

  2. 重新生成客户端 CA 文件

    • 如果客户端 CA 文件确实丢失,您可以通过以下步骤重新生成客户端 CA 文件:

      • 使用 Kubernetes CA 工具或其他证书管理工具重新生成客户端 CA 文件。

      • 将生成的客户端 CA 文件保存到 /etc/kubernetes/pki/ca.crt

  3. 重启 kubelet 服务

    • 在重新生成客户端 CA 文件后,您可以尝试重新启动 kubelet 服务,以确保 kubelet 可以正确加载依赖项并正常运行。

  4. 验证 kubelet 启动状态

    • 重新启动 kubelet 服务后,您可以使用 systemctl status kubelet 命令检查 kubelet 的启动状态,确保服务已成功启动并正常运行。

我的解决办法是把另一个node的ca证书直接复制过来

scp /etc/kubernetes/pki/ca.crt  root@10.30.21.36:/etc/kubernetes/pki/

重启kbuelet

节点变为ready状态

问题解决

ps--

查看 kubelet 日志:

  1. 查看 kubelet 日志:您可以使用以下命令来查看 kubelet 的日志信息:

    复制journalctl -u kubelet
    
  2. 查看特定时间范围的日志:如果您想查看特定时间范围内的日志,可以使用以下命令:

    复制journalctl -u kubelet --since "2022-05-06 00:00:00" --until "2022-05-06 23:59:59"
    
  3. 实时查看日志:如果您想实时查看 kubelet 的日志信息,可以使用以下命令:

    复制journalctl -u kubelet -f

以下是gpt给的解决办法,比较有章程,对我有一定启发

  • 要解决 kubelet 服务在节点 docker2 上启动失败并频繁重启的问题,您可以尝试以下几种方法来排查和解决该问题:

    1. 检查 kubelet 配置

      • 检查 kubelet 的配置文件(通常位于 /etc/kubernetes/kubelet.conf 或 /var/lib/kubelet/config.yaml),确保配置正确并且没有错误。

      • 检查 kubelet 的启动参数,特别是与网络插件相关的参数,确保配置与集群环境兼容。

    2. 查看依赖项问题

      • 根据日志中的错误信息 "Failed to construct kubelet dependencies",尝试解决依赖项加载失败的问题。可能需要检查依赖项的加载情况,并确保依赖项正确安装和配置。

    3. 更新网络插件

      • 考虑更新或更换网络插件,以适配最新的 Kubernetes 版本。您可以尝试更新 Calico 或其他网络插件的版本,以解决与网络插件相关的问题。

    4. 查看其他日志

      • 除了 kubelet 日志,还可以查看其他组件的日志,如 kube-proxy、Calico 等,以获取更多信息。可能有其他组件的日志可以提供更多线索来解决问题。

    5. 重启节点

      • 如果以上方法无法解决问题,您可以尝试重启节点 docker2,以确保节点处于干净的状态,并尝试重新启动 kubelet 服务。

    6. 联系 Kubernetes 社区

      • 如果您无法解决问题,可以向 Kubernetes 社区寻求帮助。您可以在 Kubernetes 官方论坛或 GitHub 上提交问题,寻求社区的支持和建议。

    通过以上方法,您可以尝试解决 kubelet 服务启动失败并频繁重启的问题。如果您需要进一步的帮助或有任何其他问题,请随时告诉我。我会尽力支持您解决问题。

  • 要检查 kubelet 服务启动时的依赖项加载情况,您可以按照以下步骤进行操作:

    1. 查看 kubelet 服务的启动日志

      • 使用以下命令查看 kubelet 服务的启动日志,以获取有关依赖项加载情况的信息:

        复制journalctl -u kubelet
        
    2. 查找关键错误信息

      • 在 kubelet 的启动日志中查找关键的错误信息,特别是与依赖项加载相关的错误。通常这些错误信息会指示哪些依赖项无法加载或导致服务启动失败。

    3. 检查依赖项路径

      • 确保 kubelet 配置文件中指定的依赖项路径是正确的。您可以查看 kubelet 配置文件中关于依赖项的配置,如证书路径、密钥路径等。

    4. 检查依赖项文件权限

      • 确保 kubelet 需要的依赖项文件(如证书、密钥等)的权限设置正确,kubelet 服务需要有权限读取这些文件才能正常启动。

    5. 查看系统日志

      • 除了 kubelet 的启动日志外,还可以查看系统日志(如 /var/log/messages 或 /var/log/syslog)以获取更多关于依赖项加载失败的信息。

    6. 尝试手动加载依赖项

      • 如果您确定某个依赖项可能导致 kubelet 启动失败,您可以尝试手动加载这些依赖项,以确保它们可以正确访问和使用。

    通过以上步骤,您可以检查 kubelet 服务启动时的依赖项加载情况,并尝试解决依赖项加载失败导致 kubelet 启动失败的问题。如果您在执行过程中遇到任何问题或需要进一步的帮助,请随时告诉我。我会尽力支持您解决问题。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐