【问题标题】:Container runtime network not ready: cni config uninitialized容器运行时网络未准备好:cni 配置未初始化
【发布时间】:2018-08-13 05:15:21
【问题描述】:

我在Virtualbox 内运行的centos VM 上安装kubernetes(kubeadm),所以我用yum 安装了kubeadm, kubeletdocker

现在尝试使用kubeadm init --pod-network-cidr=192.168.56.0/24 --apiserver-advertise-address=192.168.56.33/32 设置集群时遇到以下错误:

Unable to update cni config: No networks found in /etc/cni/net.d

Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

所以我检查了,/etc 中没有 cni 文件夹,即使安装了 kubernetes-cni-0.6.0-0.x86_64。我尝试在/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 中评论KUBELET_NETWORK_ARGS,但没有成功。

PS:

  • 我正在代理后面安装。

  • 我有多个网络适配器:

    • NAT:10.0.2.15/24 用于 Internet

    • 仅限主机:192.168.56.33/32

    • 和docker接口:172.17.0.1/16

Docker 版本:17.12.1-ce
kubectl 版本:主要:“1”, 次要:“9”,GitVersion:“v1.9.3”
Centos 7

【问题讨论】:

    标签: kubernetes kubeadm cni


    【解决方案1】:

    添加 pod 网络插件

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
    

    【讨论】:

      【解决方案2】:

      使用“kubeadm init”设置集群时有几点需要记住,Kubernetes 站点kubeadm cluster create 上有明确记录:

      • “kubeadm reset”如果您已经创建了以前的集群
      • 从主目录或根目录中删除“.kube”文件夹
      • (也可以使用 systemctl 停止 kubelet 以实现顺利设置)
      • 在机器上永久禁用交换,尤其是在您重新启动 linux 系统时
      • 别忘了,根据添加站点(不是 Kubernetes 站点)上提供的说明安装 a pod network add-on
      • 按照 kubeadm 在命令窗口中给出的初始化后步骤进行操作。

      如果所有这些步骤都正确执行,那么您的集群将正常运行。

      并且不要忘记执行以下命令以在创建的集群上启用调度:

      kubectl taint nodes --all node-role.kubernetes.io/master-
      

      关于如何从代理后面安装,您可能会发现这很有用:

      install using proxy

      【讨论】:

        【解决方案3】:

        检查this answer

        使用此 PR(直到获得批准):

        kubectl -n kube-system apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

        这是一个已知问题:coreos/flannel#1044

        【讨论】:

          【解决方案4】:

          我看不到 helm 服务器版本:

          $ helm version --tiller-namespace digital-ocean-namespace
          Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
          Error: could not find a ready tiller pod
          

          kubectl describe node kubernetes-master --namespace digital-ocean-namespace 命令正在显示消息:

          NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
          

          节点还没有准备好:

          $ kubectl get node --namespace digital-ocean-namespace
          NAME                  STATUS     ROLES    AGE   VERSION
          kubernetes-master     NotReady   master   82m   v1.14.1
          kubernetes-worker-1   NotReady   <none>   81m   v1.14.1
          

          我遇到了 Kubernetes 和 flannel 网络之间的版本兼容性问题。

          我的 k8s 版本是1.14,如命令所示:

          $ kubectl version
          Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
          Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:02:58Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
          

          使用命令重新安装flannel网络后:

          kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
          

          然后我可以看到 helm 服务器版本:

          $ helm version --tiller-namespace digital-ocean-namespace
          Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
          Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
          

          【讨论】:

            【解决方案5】:

            这是Github https://github.com/kubernetes/kubernetes/issues/34695 中提到的代理错误

            他们建议使用kubeadm init --use-kubernetes-version v1.4.1,但我完全改变了我的网络(没有代理)并且我设法设置了我的集群。

            之后,我们可以使用kubectl apply -f ... 设置 pod 网络,参见https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network

            【讨论】:

              【解决方案6】:

              通过使用以下命令安装 Calico CNI 插件解决了这个问题:

              curl https://docs.projectcalico.org/manifests/calico.yaml -O
              kubectl apply -f calico.yaml
              

              【讨论】:

                【解决方案7】:

                我遇到了同样的错误,它看到它看到systemd 有问题。我不记得我的最后一个systemd 版本。但是更新它为我解决了问题。

                【讨论】:

                  【解决方案8】:

                  我通过安装 Pod 网络插件解决了这个问题, 我使用了 Flannel pod 网络,这是一个非常简单的覆盖网络,可以满足 kubernetes 的要求

                  你可以用这个命令来做:

                  kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
                  

                  您可以在 kubernetes 文档中阅读更多相关信息

                  https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

                  【讨论】:

                    【解决方案9】:

                    我遇到了同样的错误,我在从节点加入集群后看到了这个问题。从节点加入后显示状态“未就绪”。

                    我检查了kubectl describe node ksalve 并观察到了上述问题。 在深入挖掘之后,我发现systemd 在主节点和从节点中是不同的。 在主服务器中,我配置了systemd,但是从服务器只有默认的cfgroup

                    一旦我从主节点删除systemd,从属状态立即变为Ready

                    【讨论】:

                    • 你能详细说明一下 > 我从主节点中删除了 systemd
                    【解决方案10】:

                    我的问题是我在创建集群后更新了主机名。这样一来,就好像主人不知道自己是主人一样。

                    我还在跑步:

                    sudo hostname $(curl 169.254.169.254/latest/meta-data/hostname) [1][2]

                    但现在我在集群初始化之前运行它

                    导致我运行 sudo journalctl -u kubelet 的错误:

                    Unable to register node "ip-10-126-121-125.ec2.internal" with API server: nodes "ip-10-126-121-125.ec2.internal" is forbidden: node "ip-10-126-121-125" cannot modify node "ip-10-126-121-125.ec2.internal"
                    

                    【讨论】:

                      【解决方案11】:

                      这适用于 AWS VPC CNI

                      1. Step1 : kubectl 获取 mutatingwebhookconfigurations -oyaml > 变异.txt

                      2. 第二步:kubectl delete -f mutating.txt

                      3. Step3:重启节点

                      4. Step4 : 你应该可以看到节点已经准备好了

                      5. Step5:重新安装 mutatingwebhook 配置

                      【讨论】:

                        【解决方案12】:

                        就我而言,这是因为我忘记打开8285 端口。 8285 端口被 flannel 使用,需要从防火墙打开。

                        例如:
                        如果您使用 flannel 插件并且您的操作系统是 centOS:

                        firewall-cmd --permanent --add-port=8285/tcp 
                        firewall-cmd --reload
                        

                        【讨论】:

                          猜你喜欢
                          • 2019-03-11
                          • 2020-04-17
                          • 2021-08-26
                          • 2017-03-02
                          • 1970-01-01
                          • 2020-05-31
                          • 2021-01-06
                          • 2015-11-19
                          • 2017-11-01
                          相关资源
                          最近更新 更多