Ubuntu 22.04 LTS下MicroK8s Pod无法启动,疑似containerd服务冲突问题
最近我碰上个棘手的问题:几天前为了测试项目装了MicroK8s,结果Pod死活启动不了,折腾半天终于摸到了一些线索,跟大家分享下。
我用的是Ubuntu 22.04 LTS,这台机器之前装过Docker和Minikube,都能正常运行。
调试过程中,我发现系统里居然跑着两个containerd服务,用这条命令就能查出来:
sudo systemctl | grep containerd
输出结果是:
containerd.service loaded active running containerd container runtime
snap.microk8s.daemon-containerd.service loaded active running Service for snap application microk8s.daemon-containerd
我感觉这就是问题的核心,先把这个线索记下来。
之后我去看snap.microk8s.daemon-kubelite.service的日志,发现这个服务一直在反复重启,报错信息是:
microk8s.daemon-kubelite[3059551]: F0619 19:29:37.362667 3059551 daemon.go:57] Kubelet exited failed to run Kub...
解决思路
既然是containerd服务冲突,核心就是让MicroK8s能正常使用自己专属的containerd环境,下面给两个可行方案:
方案一:停用系统自带的containerd(适用于不再使用Docker的场景)
如果之前的Docker已经不需要了,可以直接停掉并禁用系统层面的containerd服务:sudo systemctl stop containerd sudo systemctl disable containerd然后重启MicroK8s服务:
sudo microk8s stop sudo microk8s start方案二:修改MicroK8s的containerd配置(适用于需要保留系统containerd的场景)
如果还要继续用Docker,那就得让MicroK8s的containerd使用独立的socket路径,避免冲突:- 编辑MicroK8s的containerd模板配置文件:
sudo nano /var/snap/microk8s/current/args/containerd-template.toml- 找到
grpc配置段,修改socket_path为一个不冲突的路径,比如:
[grpc] address = "/var/snap/microk8s/current/run/containerd.sock"- 重启MicroK8s相关服务:
sudo systemctl restart snap.microk8s.daemon-containerd sudo systemctl restart snap.microk8s.daemon-kubelite
另外,也可以检查下Minikube有没有残留配置干扰,如果已经不用Minikube了,建议彻底卸载:
minikube delete sudo apt purge minikube
备注:内容来源于stack exchange,提问作者gai-jin

