kubelet启动报错:kubelet.service: Failed with result 'exit

本文记录了在Kubernetes集群中,kubelet服务启动失败的问题排查与解决过程。问题出现于CgroupDriver配置不一致,kubelet与docker的CgroupDriver默认分别为cgroupfs与systemd。通过调整kubelet的CgroupDriver为cgroupfs,成功解决了启动失败的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qyh@qyh-master:/home/kubernetes$ systemctl status kubelet
● kubelet.service - Kubernetes Kubelet
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: 
   Active: failed (Result: exit-code) since Sun 2019-02-24 17:34:38 CST; 8s ago
  Process: 13392 ExecStart=/opt/kubernetes/bin/kubelet ${KUBE_LOGTOSTDERR} ${KUB
 Main PID: 13392 (code=exited, status=255)

2月 24 17:34:38 qyh-master kubelet[13392]:       --vmodule moduleSpec           
2月 24 17:34:38 qyh-master kubelet[13392]:       --volume-plugin-dir string     
2月 24 17:34:38 qyh-master kubelet[13392]:       --volume-stats-agg-period durat
2月 24 17:34:38 qyh-master kubelet[13392]: F0224 17:34:38.463222   13392 server.
2月 24 17:34:38 qyh-master systemd[1]: kubelet.service: Service hold-off time ov
2月 24 17:34:38 qyh-master systemd[1]: kubelet.service: Scheduled restart job, r
2月 24 17:34:38 qyh-master systemd[1]: Stopped Kubernetes Kubelet.
2月 24 17:34:38 qyh-master systemd[1]: kubelet.service: Start request repeated t
2月 24 17:34:38 qyh-master systemd[1]: kubelet.service: Failed with result 'exit
2月 24 17:34:38 qyh-master systemd[1]: Failed to start Kubernetes Kubelet.

------------------------------------------------------------------------------------------------------------------

查看docker和kublelt的Cgroup Driver是否一致。这个是不一致造成的。改成一致。可以看出报错的原因是kubelet与docker的cgroup driver 不一致导致

qyh@qyh-master:/home/kubernetes$ sudo docker info|grep Cgroup
Cgroup Driver: cgroupfs

----------------------------------------------------------------------------------------------------------------------

qyh@qyh-master:/home/kubernetes$ journalctl -f -u kubelet
-- Logs begin at Sun 2019-02-24 15:21:08 CST. --
2月 24 16:53:25 qyh-master kubelet[7850]:       --vmodule moduleSpec                                                                                        comma-separated list of pattern=N settings for file-filtered logging
2月 24 16:53:25 qyh-master kubelet[7850]:       --volume-plugin-dir string                                                                                  The full path of the directory in which to search for additional third party volume plugins (default "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/")
2月 24 16:53:25 qyh-master kubelet[7850]:       --volume-stats-agg-period duration                                                                          Specifies interval for kubelet to calculate and cache the volume disk usage for all pods and volumes.  To disable volume calculations, set to 0. (default 1m0s) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
2月 24 16:53:25 qyh-master kubelet[7850]: F0224 16:53:25.446480    7850 server.go:154] unknown command:
2月 24 16:53:25 qyh-master systemd[1]: kubelet.service: Service hold-off time over, scheduling restart.
2月 24 16:53:25 qyh-master systemd[1]: kubelet.service: Scheduled restart job, restart counter is at 5.
2月 24 16:53:25 qyh-master systemd[1]: Stopped Kubernetes Kubelet.
2月 24 16:53:25 qyh-master systemd[1]: kubelet.service: Start request repeated too quickly.
2月 24 16:53:25 qyh-master systemd[1]: kubelet.service: Failed with result 'exit-code'.
2月 24 16:53:25 qyh-master systemd[1]: Failed to start Kubernetes Kubelet.

--------------------------------------------------------

docker相比1.10增加了KernelMemory变量和CgroupDriver变量,KernelMemory变量表示是否设置linux内核内存限制,CgroupDriver变量表示使用哪个Cgroup驱动,有两种驱动,分别是cgroupfs和systemd,默认使用cgroupfs。 那么解决该问题的方法是:要么修改docker 的cgroup driver , 要么改kubelet的 cgroup driver.。 建议改kubelet的值, 因为docker本身有些镜像在使用的话, 直接改会破坏镜像

--------------------------------------------------------------------

直接更改kubelet.sh

# 其他参数
KUBELET_ARGS="--cgroup-driver=cgroupfs"
EOF

KUBE_PROXY_OPTS=" \${KUBE_LOGTOSTDERR}     \\
 \${KUBE_LOG_LEVEL}       \\
 \${NODE_ADDRESS}         \\
 \${NODE_PORT}            \\
 \${NODE_HOSTNAME}        \\
 \${KUBELET_KUBECONFIG}   \\
 \${KUBE_ALLOW_PRIV}      \\
 \${KUBELET_DNS_IP}       \\
 \${KUBELET_DNS_DOMAIN}   \\
 \${KUBELET_ARGS}"
<think>好的,用户遇到了“Failed to restart kubelet.service: Unit kubelet.service not found.”这个错误,我需要帮他们分析原因并提供解决方法。首先,我应该回忆一下kubelet服务相关的知识。kubelet是Kubernetes节点上的重要组件,负责管理Pod和容器。通常在使用kubeadm安装Kubernetes时,kubelet会被安装并作为systemd服务运行。 用户的问题是无法找到kubelet.service这个单元文件,可能的原因有几个。首先,可能kubelet根本没有安装。用户可能尝试启动kubelet,但系统找不到对应的服务文件,说明安装步骤可能被跳过或者失败了。其次,安装可能有问题,比如kubelet虽然安装了,但服务文件没有正确配置,比如路径不对或者权限问题。还有可能用户使用了不同的初始化工具,比如minikube,这时候kubelet可能被其他方式管理,而不是systemd。 接下来,我需要考虑用户可能的操作背景。用户可能在初始化Kubernetes集群,或者是在节点上加入集群时遇到这个问题。可能他们按照某个教程操作,但遗漏了安装kubelet的步骤,或者在安装过程中出现了错误。另外,用户可能是在使用不同的环境,比如不同的Linux发行版,或者使用了非标准的安装方法,导致kubelet服务没有被正确安装。 需要提供的解决方案应该分步骤进行。首先,检查kubelet是否安装,可以通过which或者command命令查看是否存在可执行文件。如果没有安装,引导用户使用包管理器安装,比如apt-get install kubelet。如果已经安装但服务文件缺失,可能需要重新安装kubelet或者手动配置服务文件。另外,如果用户使用的是minikube或其他工具,可能需要提醒他们使用对应的启动命令,而不是直接通过systemd操作kubelet。 此外,用户可能对Kubernetes的安装流程不熟悉,所以需要给出具体的命令示例,比如使用apt-get安装的具体步骤,包括添加源、更新、安装等。同时,提醒用户在安装后启用和启动服务,并检查状态。如果问题依旧存在,可能需要进一步排查服务文件的位置和内容,或者查看日志来获取更多信息。 最后,需要避免技术术语过于复杂,用简单的中文分步骤说明,确保用户能够理解并按照指导操作。同时,要预见到用户可能的后续问题,比如安装后仍然无法启动,或者配置错误,可能需要进一步的帮助,因此在解答中可以建议用户检查日志或提供更多信息以便进一步排查。遇到</think> `Failed to restart kubelet.service: Unit kubelet.service not found` 错误,说明系统未找到 `kubelet` 服务的配置文件。以下是可能的原因和解决方法: --- ### **原因分析** 1. **kubelet 未安装** Kubernetes 节点组件(如 `kubelet`)未正确安装,导致系统中没有对应的服务文件。 2. **安装方式错误** - 使用 `kubeadm` 安装 Kubernetes 时,可能未安装 `kubelet` 或安装过程中断。 - 手动安装时未生成 systemd 服务文件。 3. **路径或配置问题** - `kubelet` 的服务文件(`kubelet.service`)未被正确放置在 `/etc/systemd/system/` 或 `/usr/lib/systemd/system/` 目录中。 4. **使用非 systemd 的系统** 系统未使用 `systemd`(如旧版 Debian/Ubuntu 使用 `upstart`),但安装脚本默认生成 systemd 服务文件。 --- ### **解决方法** #### 1. **安装 kubelet** 如果未安装 `kubelet`,需先安装 Kubernetes 组件: ```bash # 对于 Debian/Ubuntu 系统 sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl # 对于 CentOS/RHEL 系统 sudo yum install -y kubelet kubeadm kubectl ``` --- #### 2. **检查 kubelet 服务文件** 安装完成后,确认服务文件存在: ```bash # 检查服务文件路径 ls /etc/systemd/system/kubelet.service ls /usr/lib/systemd/system/kubelet.service # 如果服务文件缺失,重新安装 kubelet sudo apt-get --reinstall install kubelet # Debian/Ubuntu sudo yum reinstall kubelet # CentOS/RHEL ``` --- #### 3. **手动创建服务文件(备用方案)** 如果安装后仍缺失服务文件,可手动创建(以 systemd 为例): 1. 创建文件 `/etc/systemd/system/kubelet.service`: ```ini [Unit] Description=Kubernetes Kubelet Documentation=https://kubernetes.io/docs/home/ After=docker.service Requires=docker.service [Service] ExecStart=/usr/bin/kubelet Restart=always StartLimitInterval=0 RestartSec=10 [Install] WantedBy=multi-user.target ``` 2. 重新加载 systemd 配置: ```bash sudo systemctl daemon-reload ``` --- #### 4. **启用并启动 kubelet** ```bash # 启用服务(开机自启) sudo systemctl enable kubelet # 启动服务 sudo systemctl start kubelet # 检查状态 sudo systemctl status kubelet ``` -- #### 5. **检查安装源配置** 如果通过包管理器安装失败,可能是源配置错误: - **Debian/Ubuntu**:确保已添加 Kubernetes 官方源: ```bash sudo apt-get install -y apt-transport-https ca-certificates curl curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt-get update ``` - **CentOS/RHEL**:确保已配置 Kubernetes 仓库: ```bash cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key EOF sudo yum update ``` --- ### **其他注意事项** - **minikube 用户**:如果使用 `minikube`,无需手动管理 `kubelet`,直接通过 `minikube start` 启动集群。 - **非 systemd 系统**:如果是旧版系统(如 Ubuntu 14.04),需使用 `upstart` 或 `init.d` 脚本管理服务。 --- ### **验证是否解决** - 确认 `kubelet` 可执行文件存在: ```bash which kubelet # 输出应为 /usr/bin/kubelet ``` - 检查服务状态: ```bash sudo systemctl status kubelet ``` - 正常状态应为 `active (running)`。 如果问题仍未解决,请提供以下信息以便进一步排查: 1. 操作系统类型及版本。 2. 安装 Kubernetes 的具体步骤。 3. 执行 `sudo journalctl -u kubelet` 查看日志错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值