Kubernetes 重新启动节点后,由于IP不足,POD卡在containerCreating状态

Kubernetes 重新启动节点后,由于IP不足,POD卡在containerCreating状态,kubernetes,kubeadm,weave,cni,Kubernetes,Kubeadm,Weave,Cni,我在1.11上部署了3个节点的Kubernetes集群,运行2.5.1版的kubeadm和weave(CNI)。我提供IP范围为128 IP的weave CIDR。在两次重新启动节点后,一些POD卡在containerCreating状态 运行kubectl description pod后,您将看到以下错误: Events: Type Reason Age From Message ----

我在1.11上部署了3个节点的Kubernetes集群,运行2.5.1版的kubeadm和weave(CNI)。我提供IP范围为128 IP的weave CIDR。在两次重新启动节点后,一些POD卡在
containerCreating
状态

运行
kubectl description pod
后,您将看到以下错误:

Events:
Type     Reason                  Age                From                Message
----     ------                  ----               ----                
-------
Normal   SandboxChanged          20m (x20 over 1h)  kubelet, 10.0.1.63  Pod sandbox changed, it will be killed and re-created.
Warning  FailedCreatePodSandBox  30s (x25 over 1h)  kubelet, 10.0.1.63  Failed create pod sandbox: rpc error: code = DeadlineExceeded desc = context deadline exceeded
如果我检查有多少容器正在运行以及为这些容器分配了多少IP地址,我可以看到24个容器:

[root@ip-10-0-1-63 centos]# weave ps | wc -l
26
要在该节点上编织的总IP数为42

[root@ip-10-0-1-212 centos]# kubectl exec -n kube-system -it weave-net-6x4cp -- /home/weave/weave --local status ipam
Defaulting container name to weave.
Use 'kubectl describe pod/weave-net-6x4cp -n kube-system' to see all of the containers in this pod.
6e:0d:f3:d7:f5:49(10.0.1.63)                42 IPs (32.8% of total) (42 active)
7a:24:6f:3c:1b:be(10.0.1.212)               40 IPs (31.2% of total) 
ee:00:d4:9f:9d:79(10.0.1.43)                46 IPs (35.9% of total) 
您可以看到所有42个IP都处于活动状态,因此没有更多的IP可分配给新容器。但在42个容器中,只有26个实际分配给了容器,我不确定剩余的IP在哪里。它发生在所有三个节点上

以下是编织状态的输出,供您参考:

[root@ip-10-0-1-212 centos]# weave status

    Version: 2.5.1 (version 2.5.2 available - please upgrade!)

    Service: router
    Protocol: weave 1..2
       Name: 7a:24:6f:3c:1b:be(10.0.1.212)
    Encryption: disabled
PeerDiscovery: enabled
    Targets: 3
Connections: 3 (2 established, 1 failed)
      Peers: 3 (with 6 established connections)
TrustedSubnets: none

    Service: ipam
     Status: waiting for IP(s) to become available
      Range: 192.168.13.0/25
DefaultSubnet: 192.168.13.0/25

如果您需要更多信息,我很乐意提供。有什么线索吗?

不确定我们是否有同样的问题。 但在我重新启动一个节点之前。我需要先把它排干。因此,该节点中的所有吊舱都将被逐出。我们可以安全地重新启动节点。 在该节点启动之后。您需要再次取消编码。该节点将再次用于调度pod


我的参考资料不确定我们是否有同样的问题。 但在我重新启动一个节点之前。我需要先把它排干。因此,该节点中的所有吊舱都将被逐出。我们可以安全地重新启动节点。 在该节点启动之后。您需要再次取消编码。该节点将再次用于调度pod


我的参考资料

我猜16个IP已预留用于POD重用。这些是基于CIDR范围的每个节点的最大POD

  Maximum Pods per Node CIDR Range per Node
  8                     /28
  9 to 16               /27
  17 to 32              /26
  33 to 64              /25
  65 to 110             /24

我猜有16个IP是为POD的重用而预留的。这些是基于CIDR范围的每个节点的最大POD

  Maximum Pods per Node CIDR Range per Node
  8                     /28
  9 to 16               /27
  17 to 32              /26
  33 to 64              /25
  65 to 110             /24

以防您的IP已耗尽,并且在重新启动后某些IP未释放。您可以删除文件
/var/lib/weave/weave netdata.db
,然后重新启动weave吊舱

在我的例子中,我添加了一个systemd脚本,在每次重新启动或关闭系统时,该脚本都会删除
/var/lib/weave/weave netdata.db
文件,一旦系统启动,它会将新的Ip分配给所有的POD,而weave Ip将不再出现


在这里发布这篇文章,希望其他人会发现它对他们的用例有用。

以防您的IP耗尽,并且一些IP在重新启动后没有释放。您可以删除文件
/var/lib/weave/weave netdata.db
,然后重新启动weave吊舱

在我的例子中,我添加了一个systemd脚本,在每次重新启动或关闭系统时,该脚本都会删除
/var/lib/weave/weave netdata.db
文件,一旦系统启动,它会将新的Ip分配给所有的POD,而weave Ip将不再出现


在此发布此消息,希望其他人会发现它对他们的用例有用。

这是重新启动节点的安全方法。在我们的例子中,K8s处于裸金属环境中,可能会发生由于网络故障或其他原因导致节点停机的情况。是的,我的K8s环境也处于裸金属环境中。但我用印花布做CNI。但是,如果您以安全的方式重新启动该节点。它应该是同步的。这个错误告诉我们新的pod不是由weave签名的。我不知道编织是如何工作的。根据参考,这是重新启动节点的安全方法。在我们的例子中,K8s处于裸金属环境中,可能会发生由于网络故障或其他原因导致节点停机的情况。是的,我的K8s环境也处于裸金属环境中。但我用印花布做CNI。但是,如果您以安全的方式重新启动该节点。它应该是同步的。这个错误告诉我们新的pod不是由weave签名的。我不知道编织是如何工作的。根据参考资料,需要黑客攻击,但我们应该解决Github问题。是的,当时我们的IP数量有限(确切地说是256个),weave需要一些时间来恢复IP,因此我们必须实施此解决方案。当时我们提出了一个问题,他们要求我们增加IP范围以避免这种情况。这个问题是在我们不断重新启动环境时发生的,导致POD在压力测试中一次又一次地重新启动。好的,我们面临这个问题时,出现了大量的放大和缩小,我认为这可能与集群中的死节点和IPAM未准备就绪有关。已经打开了一个问题需要黑客,但我们应该打开Github问题。是的,当时我们只有有限数量的IP(确切地说是256个),weave需要一些时间来恢复IP,因此我们必须实施此解决方案。当时我们提出了一个问题,他们要求我们增加IP范围以避免这种情况。这个问题是在我们不断重新启动环境时发生的,导致POD在压力测试中一次又一次地重新启动。好的,我们面临这个问题时,出现了大量的放大和缩小,我认为这可能与集群中的死节点和IPAM未准备就绪有关。已经开始了一个问题