在创建/添加节点到kubernetes时,我们还必须创建一个Canal pod。
目前,kubernetes在尝试安排pod之前不会等待Canal pod准备就绪,导致失败(错误如下)
Error syncing pod, skipping: failed to "CreatePodSandbox" for "nginx-2883150634-fh5s2_default(385d61d6-6662-11e7-8989-000d3af349de)" with CreatePodSandboxError: "CreatePodSandbox for pod \"nginx-2883150634-fh5s2_default(385d61d6-6662-11e7-8989-000d3af349de)\" failed: rpc error: code = 2 desc = NetworkPlugin cni failed to set up pod \"nginx-2883150634-fh5s2_default\" network: failed to find plugin \"loopback\" in path [/opt/loopback/bin /opt/cni/bin]"
一旦运河舱启动并运行,只需删除发生故障的吊舱即可解决问题。
我的问题是:在尝试安排节点上的pod之前,告诉kubernetes等待网络容器准备好的正确方法是什么?
答案 0 :(得分:0)
这是常见问题,所以无论如何我都会发布答案。
这种行为很正常,尤其是在自托管的k8s群集中。在自托管环境中,所有部署包括控制平面元素(例如,kube-apiserver,canal)都是同时安排的。
一旦控制平面运行,失败的pod最终应该正常启动。 k8s将继续重启失败的pod,直到它正常启动。
为了使Canal首先启动,清单可以与其他控制平面清单一起部署在k8s节点中(例如,kube-apiserver,kube-controller-manager)。它通常在/etc/kubernetes/manifests
中找到,但路径完全是任意的。但是,如果Canal需要很长时间才能准备就绪,则会出现相同的错误。