CentOS 8下MicroK8s因containerd配置异常导致daemon-kubelet无法启动的修复咨询
CentOS 8.3环境下MicroK8s kubelet启动失败修复方案
问题根因
报错unknown service runtime.v1alpha2.RuntimeService的核心原因是MicroK8s内置的containerd服务未正确加载CRI插件配置,之前的修复操作存在两个关键错误:
- 调用系统全局安装的containerd生成默认配置,与MicroK8s snap包内置的containerd版本、配置结构不兼容
- 未确认snap服务实际加载的配置文件路径,错误生成的配置无法覆盖原有残留的Docker相关异常设置
分步修复操作
1. 恢复原始配置备份
先回滚之前错误覆盖的配置文件,避免不兼容的系统配置持续干扰:
rm -f /var/snap/microk8s/current/args/containerd.toml mv /var/snap/microk8s/current/args/containerd.toml.bak /var/snap/microk8s/current/args/containerd.toml
2. 确认服务实际加载的配置路径
snap服务运行在独立沙箱中,需先核实containerd启动时实际读取的配置文件位置,避免改错路径:
systemctl cat snap.microk8s.daemon-containerd.service | grep ExecStart
正常输出会包含--config /var/snap/microk8s/current/args/containerd.toml参数,确认路径与修改目标一致后再进行后续操作。
3. 校验并修正CRI插件配置
编辑MicroK8s专属的containerd配置,确保CRI插件处于启用状态:
vi /var/snap/microk8s/current/args/containerd.toml
找到配置中的[plugins."io.containerd.grpc.v1.cri"]段,确认行首无注释标记(#);如果该段缺失,手动添加如下配置:
[plugins."io.containerd.grpc.v1.cri"] enable_selinux = false disable_apparmor = true
注意:不要全量替换为系统containerd的默认配置,仅需确保CRI插件段未被注释、套接字路径正确即可,MicroK8s原生配置中已预置其他必要参数,全量替换会导致组件不兼容。
4. 清理异常运行缓存
containerd加载错误配置时可能生成残留缓存状态,需清理后重启全量服务:
# 停止所有MicroK8s服务 microk8s stop # 清理containerd临时缓存(不会删除已拉取的镜像和集群配置) rm -rf /var/snap/microk8s/common/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/tmp/* # 重启MicroK8s服务 microk8s start
5. 验证修复结果
执行检查命令确认所有组件状态正常:
microk8s inspect
确认daemon-kubelet服务状态为running后,再执行microk8s kubectl get nodes验证集群节点状态正常即可。
注意事项
- 同一台机器上不要同时运行系统自带的containerd、Docker服务,避免端口冲突、配置路径互相污染
- 所有针对MicroK8s内部组件的配置操作,必须调用snap内置的二进制程序,如需生成containerd默认配置,需使用路径
/snap/microk8s/current/usr/bin/containerd config default,禁止直接调用系统安装的containerd命令 - CentOS 8.3环境下需提前关闭SELinux或配置对应访问规则,避免后续出现容器权限异常
内容的提问来源于stack exchange,提问作者Mete Alpaslan KATIRCIOGLU
相关产品推荐
相关产品推荐

