1

关于我使用的以下描述 pod 的日志,我的 pod 由于“FailedCreatePodSandBox”而陷入挂起状态</p>

有一些关键说明:-我使用印花布作为 CNI。- 这个日志重复多次,我只是把这个作为样本过去。- ip 192.168.90.152 属于入口,129 属于 k8s 的监控 NS 中的分蘖,我不知道为什么 k8s 会尝试将其绑定到另一个 pod。

我用谷歌搜索了这个问题,我在这里什么也没有。

  Warning  FailedCreatePodSandBox  2m56s                   kubelet, worker-dev  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "2abca59b55efb476723ec9c4402ede6e3a6ee9aed67ecd19c3ef5c7719ae51f1" network for pod "service-stg-8d9d68475-2h4b8": NetworkPlugin cni failed to set up pod "service-stg-8d9d68475-2h4b8_stg" network: error adding host side routes for interface: cali670b0a20d66, error: route (Ifindex: 10688, Dst: 192.168.90.152/32, Scope: 253) already exists for an interface other than 'cali670b0a20d66'
  Warning  FailedCreatePodSandBox  2m53s                   kubelet, worker-dev  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "ec155fd442c0ea09b282a13c4399ae25b97d5c3786f90f1a045449b52ced4cb7" network for pod "service-stg-8d9d68475-2h4b8": NetworkPlugin cni failed to set up pod "service-stg-8d9d68475-2h4b8_stg" network: error adding host side routes for interface: cali670b0a20d66, error: route (Ifindex: 10691, Dst: 192.168.90.129/32, Scope: 253) already exists for an interface other than 'cali670b0a20d66'

有人可以帮助解决这个问题吗?

4

1 回答 1

1

根据 CNI 网络插件的设计和 Kubernetes 网络模型,Calico 定义了特殊的 IP 池CIDR CALICO_IPV4POOL_CIDR来确定哪些 IP 范围可用于跨 k8s 集群分配 pod IP 地址。

当您在特定的 K8s 节点上启动新 Pod 时,Calico 插件将执行以下操作:

  • 检查该节点上是否存在Pod;
  • 在定义的IPAM范围内为此 Pod 分配 IP 地址 ;
  • 在节点的主机上创建一个虚拟接口和适当的路由规则,以桥接 Pod 和容器之间的网络流量;
  • 在 K8s API 服务器中注册 Pod IP。

您可以在相关节点上获取有关 Calico 虚拟接口的数据,即:

$ ip link | grep cali

 cali80d3ff89956@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP mode DEFAULT group default 
 calie58f9d521fb@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1440 qdisc noqueue state UP mode DEFAULT group default

为了估计当前的问题,可以考虑查询 Calico install-cniPod 的容器日志,获取某个 Pod 的数据service-stg-8d9d68475-2h4b8,搜索已有的虚拟接口映射:

kubectl logs $(kubectl get po -l k8s-app=calico-node -o jsonpath='{.items[0].metadata.name}' -n kube-system) -c calico-node -n kube-system| grep service-stg-8d9d68475-2h4b8_stg
于 2019-08-26T15:18:05.147 回答