问题描述,这是最开始不知道如何排查问题时,看到的最开始的错误如下:

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. 查看各节点的节点亲和度

    1
    kubectl describe node k8s-hostname-1 | grep Taints

    image-20220127172204944

    其中 k8s-hostname-1 为各节点的hostname

  2. 总共三个节点(一个master,2个node),发现全部都是NoSchedule状态

  3. 尝试去除污点

    1
    kubectl taint nodes k8s-hostname-1 node-role.kubernetes.io/master:NoSchedule-

    image-20220127172504118

  4. 虽然提示去除了污点,但是再去查看时,污点依然存在
    image-20220127172550251

  5. 最后发现,所有的节点状态都是处于 NotReady ,查看其中一个node的详细情况

    1
    kubectl get nodes

    image-20220128102317301

    1
    kubectl describe node k8s-hostname-1

    image-20220128102410103

  6. 从节点的详情查看到节点的cni插件没有被初始化,网卡的插件没有准备好,导致节点都处于NotReady状态

  7. 使用 systemctl status kubelet 也可以查看到问题所在
    image-20220128102750449

  8. 最后解决办法是重启 containerd 即可

    1
    systemctl restart containerd
  9. 此时再看node的污点已经没有了
    image-20220128110644548

到这里,k8s集群 才算是正常的搭建好了,下面继续部署mysql

  1. 准备好了mysql的pv和deployment的配置文件
    image-20220128111422781

  2. 准备安装

    1
    2
    kubectl apply -f mysql-pv.yaml
    kubectl apply -f mysql-deployment.yaml
  3. 随后查看mysql的pod状态,处于ImagePullBackOff

    1
    kubectl get pod

    image-20220128111558033

  4. 查看详情后,发现是镜像无法拉取,这里用的是内部自己搭建的镜像仓库harbor

    1
    kubectl describe pod mysql-765868998c-9cdxw

    image-20220128111959878

  5. 通过查询资料,基本都是说的要创建 secret

    1
    kubectl create secret docker-registry default --docker-server=harbor.core.powercloud.com --docker-username=admin --docker-password=rootxxx
  6. 但是创建完成后,依旧无法拉取进行镜像

  7. 无法拉取私有镜像仓库中的镜像,是需要对containerd进行相应的配置,在找containerd的配置文件时,发现是我将 /etc/containerd/config.toml 文件给删了,通过如下方式可以创建一个默认的文件

    1
    containerd config default > /etc/containerd/config.toml

(待完善)