记一次使用k8s部署mysql引发的错误排查历程
问题描述,这是最开始不知道如何排查问题时,看到的最开始的错误如下:
0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn’t tolerate, 2 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn’t tolerate.
1 | 补充:这是自认为k8s集群已经部署好了的情况下,去部署mysql遇到的错误,通过 kubectl describe pod mysql 查看到的错误 |
接下来的一系列操作:
查看各节点的节点亲和度
1 kubectl describe node k8s-hostname-1 | grep Taints其中 k8s-hostname-1 为各节点的hostname
总共三个节点(一个master,2个node),发现全部都是
NoSchedule
状态尝试去除污点
1 kubectl taint nodes k8s-hostname-1 node-role.kubernetes.io/master:NoSchedule-
虽然提示去除了污点,但是再去查看时,污点依然存在
最后发现,所有的节点状态都是处于 NotReady ,查看其中一个node的详细情况
1 kubectl get nodes
1 kubectl describe node k8s-hostname-1从节点的详情查看到节点的cni插件没有被初始化,网卡的插件没有准备好,导致节点都处于NotReady状态
使用 systemctl status kubelet 也可以查看到问题所在
最后解决办法是重启 containerd 即可
1 systemctl restart containerd此时再看node的污点已经没有了
到这里,k8s集群 才算是正常的搭建好了,下面继续部署mysql
准备好了mysql的pv和deployment的配置文件
准备安装
1
2 kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-deployment.yaml随后查看mysql的pod状态,处于ImagePullBackOff
1 kubectl get pod查看详情后,发现是镜像无法拉取,这里用的是内部自己搭建的镜像仓库
harbor
1 kubectl describe pod mysql-765868998c-9cdxw通过查询资料,基本都是说的要创建
secret
1 kubectl create secret docker-registry default --docker-server=harbor.core.powercloud.com --docker-username=admin --docker-password=rootxxx但是创建完成后,依旧无法拉取进行镜像
无法拉取私有镜像仓库中的镜像,是需要对containerd进行相应的配置,在找containerd的配置文件时,发现是我将
/etc/containerd/config.toml
文件给删了,通过如下方式可以创建一个默认的文件
1 containerd config default > /etc/containerd/config.toml(待完善)