K8s 计算节点安装 kubernetes-node 遇到问题如何解决?

文章导读
遇到「kubernetes-node」安装报错,通常是因为包名过时或源配置不对,建议直接改用官方推荐的 kubelet 组件配合 kubeadm 流程加入集群。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

遇到「kubernetes-node」安装报错,通常是因为包名过时或源配置不对,建议直接改用官方推荐的 kubelet 组件配合 kubeadm 流程加入集群。

先说结论:大多数情况下不需要单独寻找 kubernetes-node 包,核心是确保 kubelet 服务正常运行并能被控制平面识别。

  • 先确认:操作系统软件源是否指向了官方维护的 Kubernetes 仓库
  • 先处理:优先安装 kubelet、kubeadm 和容器运行时,而非纠结于 node 包
  • 再验证:通过 kubectl get nodes 查看节点状态是否为 Ready

命令速用版

如果只是想快速让节点加入集群,不要纠结于特定的 node 包,直接检查 kubelet 状态并执行 join 命令:

K8s 计算节点安装 kubernetes-node 遇到问题如何解决?
# 检查 kubelet 服务状态
systemctl status kubelet

# 查看容器运行时是否运行
crictl info

# 执行节点加入命令(需在控制平面生成)
kubeadm join <control-plane-ip>:6443 `--token` <token> `--discovery-token-ca-cert-hash` sha256:<hash>

为什么会这样

早期 Kubernetes 版本或特定 Linux 发行版的仓库中曾存在 kubernetes-node 包,但随着架构演进,官方标准安装方式已调整为模块化组件。核心节点代理是 kubelet,它负责向 API Server 注册节点并管理 Pod 生命周期。如果仓库中找不到 node 包,通常是因为该发行版已跟随官方策略,将功能拆分到了 kubelet 和 kubeadm 中。强行寻找旧包可能导致版本不匹配或依赖冲突。

分步处理

按照标准流程重新配置节点,避免使用过时的包名:

  1. 配置软件源
    确保 /etc/yum.repos.d/ 或 /etc/apt/sources.list.d/ 中配置了正确的 Kubernetes 仓库地址。公开资料中没有看到可靠的量化数据表明第三方源比官方源更稳定,建议优先使用官方源。
  2. 安装核心组件
    使用包管理器安装 kubelet、kubeadm 和 kubectl。例如在 CentOS 上:
    yum install -y kubelet kubeadm kubectl
    在 Ubuntu 上:
    apt-get update && apt-get install -y kubelet kubeadm kubectl
  3. 配置容器运行时
    确保 containerd 或 Docker 已安装并配置了 systemd cgroup 驱动。kubelet 需要与运行时通信,否则节点无法启动。
  4. 启动 kubelet
    执行 systemctl enable `--now` kubelet。注意此时节点可能还未 Ready,因为尚未加入集群。
  5. 加入集群
    在控制平面节点运行 kubeadm token create `--print-join-command` 获取命令,然后在计算节点执行。

怎么验证是否生效

在控制平面节点执行以下命令检查:

K8s 计算节点安装 kubernetes-node 遇到问题如何解决?
kubectl get nodes

目标节点状态应显示为 Ready。如果状态是 NotReady,检查 kubelet 日志:

journalctl -u kubelet -f

常见日志错误包括证书验证失败、容器运行时未连接或网络插件未安装。

常见坑

  • Swap 分区未关闭:kubelet 默认要求关闭 swap,否则启动会失败。可通过 swapoff -a 临时关闭,或在 kubelet 配置中允许。
  • 版本不一致:控制平面与计算节点的 kubelet 版本差异不应超过一个小版本,否则可能导致 API 兼容性问题。
  • 网络插件缺失:节点加入后若 Pod 网络不通,通常是因为未安装 CNI 插件(如 Calico、Flannel),这会导致节点状态无法转为 Ready。
  • 防火墙拦截:确保 6443、10250 等端口在节点间可达,否则心跳检测会失败。

参考来源

  • Kubernetes Official Documentation, Installing kubeadm, https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
  • Kubernetes Official Documentation, Creating a cluster with kubeadm, https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/