2017-02-25 2 views
1

J'ai mis en place un cluster Kubernetes à un seul nœud, en utilisant kubeadm, sur Ubuntu 16.04 LTS avec flanelle.Kubernetes: Obtient fréquemment "Erreur d'ajout de réseau: aucune adresse IP disponible dans le réseau: cbr0"

La plupart du temps, tout fonctionne bien, mais tous les deux jours, le cluster se trouve dans un état où il ne peut pas planifier de nouveaux modules - les modules sont bloqués en état "En attente" et kubectl describe pod I des messages d'erreur comme ceux-ci:

Events: 
    FirstSeen LastSeen Count From    SubObjectPath Type  Reason  Message 
    --------- -------- ----- ----    ------------- -------- ------  ------- 
    2m  2m  1 {default-scheduler }    Normal  Scheduled Successfully assigned dex-1939802596-zt1r3 to superserver-03 
    1m  2s  21 {kubelet superserver-03}   Warning  FailedSync Error syncing pod, skipping: failed to "SetupNetwork" for "somepod-1939802596-zt1r3_somenamespace" with SetupNetworkError: "Failed to setup network for pod \"somepod-1939802596-zt1r3_somenamespace(167f8345-faeb-11e6-94f3-0cc47a9a5cf2)\" using network plugins \"cni\": no IP addresses available in network: cbr0; Skipping pod" 

J'ai trouvé cet stackoverflow question et la solution de contournement, il est suggéré. Il aide à récupérer (cela prend quelques minutes cependant), mais le problème revient après un certain temps ...

J'ai également rencontré ce open issue, et a également obtenu le problème récupéré en utilisant la solution de contournement suggérée, mais encore , le problème revient. Aussi, il est pas exactement mon cas, et la question a été fermé après seulement trouver une solution ...: \

Détails techniques:

kubeadm version: version.Info{Major:"1", Minor:"6+", GitVersion:"v1.6.0-alpha.0.2074+a092d8e0f95f52", GitCommit:"a092d8e0f95f5200f7ae2cba45c75ab42da36537", GitTreeState:"clean", BuildDate:"2016-12-13T17:03:18Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} 

Kubernetes Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:34:56Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} 

Started le cluster avec ces commandes:

kubeadm init --pod-network-cidr 10.244.0.0/16 --api-advertise-addresses 192.168.1.200 

kubectl taint nodes --all dedicated- 

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

Certains journaux syslog qui peuvent être pertinents (je suis arrivé beaucoup):

Feb 23 11:07:49 server-03 kernel: [ 155.480669] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready 
Feb 23 11:07:49 server-03 dockerd[1414]: time="2017-02-23T11:07:49.735590817+02:00" level=warning msg="Couldn't run auplink before unmount /var/lib/docker/aufs/mnt/89bb7abdb946d858e175d80d6e1d2fdce0262af8c7afa9c6ad9d776f1f5028c4-init: exec: \"auplink\": executable file not found in $PATH" 
Feb 23 11:07:49 server-03 kernel: [ 155.496599] aufs au_opts_verify:1597:dockerd[24704]: dirperm1 breaks the protection by the permission bits on the lower branch 
Feb 23 11:07:49 server-03 systemd-udevd[29313]: Could not generate persistent MAC address for vethd4d85eac: No such file or directory 
Feb 23 11:07:49 server-03 kubelet[1228]: E0223 11:07:49.756976 1228 cni.go:255] Error adding network: no IP addresses available in network: cbr0 
Feb 23 11:07:49 server-03 kernel: [ 155.514994] IPv6: eth0: IPv6 duplicate address fe80::835:deff:fe4f:c74d detected! 
Feb 23 11:07:49 server-03 kernel: [ 155.515380] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 
Feb 23 11:07:49 server-03 kernel: [ 155.515588] device vethd4d85eac entered promiscuous mode 
Feb 23 11:07:49 server-03 kernel: [ 155.515643] cni0: port 34(vethd4d85eac) entered forwarding state 
Feb 23 11:07:49 server-03 kernel: [ 155.515663] cni0: port 34(vethd4d85eac) entered forwarding state 
Feb 23 11:07:49 server-03 kubelet[1228]: E0223 11:07:49.757001 1228 cni.go:209] Error while adding to cni network: no IP addresses available in network: cbr0 
Feb 23 11:07:49 server-03 kubelet[1228]: E0223 11:07:49.757056 1228 docker_manager.go:2201] Failed to setup network for pod "somepod-752955044-58g59_somenamespace(5d6c28e1-f8dd-11e6-9843-0cc47a9a5cf2)" using network plugins "cni": no IP addresses available in network: cbr0; Skipping pod 

Un grand merci!

Edit:

Je suis en mesure de le reproduire. Il semble que ce soit un échappement des adresses IP dans le CIDR du kubelet. Résultats:

  • D'abord, le podCIDR du nœud est (il a obtenu par kubectl get node -o yaml): podCIDR: 10.244.0.0/24 (BTW, pourquoi pas/16 comme CIDR de cluster j'ai mis dans le commnad de kubeadm?).

  • Deuxième:

    $ sudo ls -la /var/lib/cni/networks/cbr0 | wc -l

    256 (qui est, 256 adresses IP sont affectées, non?)

  • Mais, cela arrive même si je ne captez pas plus de 256 dosettes Kubernetes en cours d'exécution et services:

    $ kubectl get all --all-namespaces | wc -l

    180

    ### (Yes, this includes not only pods and services, but also jobs, deployments and replicasets)

Ainsi, la maison vient les adresses IP sont épuisées? Comment réparer ça? Il ne peut pas être que ces solutions de contournement sont les seuls moyens ...

Merci encore.

Modifier (2)

Une autre question connexe: https://github.com/containernetworking/cni/issues/306

Répondre

2

Pour l'instant, c'est la meilleure solution que j'ai trouvé:

https://github.com/kubernetes/kubernetes/issues/34278#issuecomment-254686727

J'ai mis en place un travail cron pour exécuter ce script sur @reboot.

Il semble que ce problème a été résolu avec un temp fix de Garbage Collecter les pods sur un événement de redémarrage du démon Docker, mais cette fonctionnalité n'a probablement pas été activée dans mon cluster.

Il y a quelques jours, le nouveau meilleur long-term fix vient d'être fusionné, donc j'espère que ce problème sera corrigé dans la prochaine version 1.6.0 de Kubernetes.