在新节点上安排pod之前等待运河吊舱

时间:2017-07-12 16:19:18

标签: kubernetes

在创建/添加节点到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等待网络容器准备好的正确方法是什么?

  • 我应该将节点变为仅允许运河,并在准备就绪后取消它吗?
  • 我应该在运河准备好后编写删除失败的吊舱的脚本吗?
  • 是否有配置或方法可以解决问题?

1 个答案:

答案 0 :(得分:0)

这是常见问题,所以无论如何我都会发布答案。

这种行为很正常,尤其是在自托管的k8s群集中。在自托管环境中,所有部署包括控制平面元素(例如,kube-apiserver,canal)都是同时安排的。

一旦控制平面运行,失败的pod最终应该正常启动。 k8s将继续重启失败的pod,直到它正常启动。

为了使Canal首先启动,清单可以与其他控制平面清单一起部署在k8s节点中(例如,kube-apiserver,kube-controller-manager)。它通常在/etc/kubernetes/manifests中找到,但路径完全是任意的。但是,如果Canal需要很长时间才能准备就绪,则会出现相同的错误。

相关问题