Kubernet cni config неинициализирован

Я устанавливаю kubernetes(kubeadm) на Centos VM, работающий внутри Virtualboxтак что с ням я установил kubeadm, kubelet а также docker,

Теперь при попытке настроить кластер с kubeadm init --pod-network-cidr=192.168.56.0/24 --apiserver-advertise-address=192.168.56.33/32 я сталкиваюсь со следующей ошибкой:

Unable to update cni config: No networks found in /etc/cni/net.d

Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

Итак, я проверил, нет cni папка в /etc даже то, что kubernetes-cni-0.6.0-0.x86_64 установлено. Я пробовал комментировать KUBELET_NETWORK_ARGS в /etc/systemd/system/kubelet.service.d/10-kubeadm.conf но это не сработало.

PS:

  • Я устанавливаю за прокси.

  • У меня есть несколько сетевых адаптеров:

    • NAT: 10.0.2.15/24 для Интернета

    • Только хост: 192.168.56.33/32

    • И интерфейс докера: 172.17.0.1/16

Версия докера: 17.12.1-ce
kubectl версия: Major: "1", Minor: "9", GitVersion: "v1.9.3"
Centos 7

15 ответов

Добавить надстройку Pod Network

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

Остановите и отключите apparmor и перезапустите службу containerd на этом узле, чтобы решить вашу проблему.

      root@node:~# systemctl stop apparmor
root@node:~# systemctl disable apparmor 
root@node:~# systemctl restart containerd.service

При настройке кластера с помощью "kubeadm init" следует помнить несколько моментов, и это четко задокументировано на сайте Kubernetes.

  • "сброс kubeadm", если вы уже создали предыдущий кластер
  • Удалите папку ".kube" из домашнего или корневого каталога.
  • (Также остановка kubelet с помощью systemctl позволит выполнить плавную настройку)
  • Постоянно отключите swap на компьютере, особенно если вы перезагружаете систему Linux
  • И не забывайте, установите надстройку сети pod в соответствии с инструкциями, приведенными на сайте надстройки (не сайт Kubernetes)
  • Выполните шаги после инициализации, заданные в командном окне kubeadm.

Если все эти шаги выполнены правильно, то ваш кластер будет работать правильно.

И не забудьте выполнить следующую команду, чтобы включить планирование на созданном кластере:

kubectl taint nodes --all node-role.kubernetes.io/master-

Проверьте этот ответ.

Используйте этот PR (пока не будет утвержден):

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

это известная проблема: coreos / flannel # 1044

Я не мог видеть версию сервера руля:

$ helm version --tiller-namespace digital-ocean-namespace
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Error: could not find a ready tiller pod

kubectl describe node kubernetes-master --namespace digital-ocean-namespace Команда показала сообщение:

NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

Узлы не были готовы:

$ kubectl get node --namespace digital-ocean-namespace
NAME                  STATUS     ROLES    AGE   VERSION
kubernetes-master     NotReady   master   82m   v1.14.1
kubernetes-worker-1   NotReady   <none>   81m   v1.14.1

У меня была проблема совместимости версий между Kubernetes и фланелевой сетью.

Моя версия k8s была 1.14 как видно из команды:

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:02:58Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"}

После переустановки фланелевой сети с помощью команды:

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

Я мог тогда видеть версию сервера руля:

$ helm version --tiller-namespace digital-ocean-namespace
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

Решили эту проблему, установив плагин Calico CNI с помощью следующих команд:

      curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml

Я решил это, установив надстройку сети Pod, я использовал сеть Flannel pod, которая представляет собой очень простую оверлейную сеть, удовлетворяющую требованиям Kubernetes.

вы можете сделать это с помощью этой команды:

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

Подробнее об этом вы можете прочитать в документации kubernetes.

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

Это была ошибка прокси, как упоминалось в Github https://github.com/kubernetes/kubernetes/issues/34695

Они предложили использовать kubeadm init --use-kubernetes-version v1.4.1 но я полностью меняю свою сеть (без прокси) и мне удается настроить мой кластер.

После этого мы можем настроить сеть под kubectl apply -f ... см. https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

В моем случае я перезапустил докер, и статус изменился на «Готово».

      sudo systemctl stop docker
sudo systemctl start docker

Я сталкиваюсь с теми же ошибками, и он видит, что видит, что systemdесть проблемы. Я не помню свой последнийsystemdверсия. Но обновление решило для меня проблемы.

В моем случае это потому, что я забыл открыть порт. 8285 порт используется фланелью, вам нужно открыть его из брандмауэра.

например:
если вы используете дополнение flannel и ваша ОС - CentOS:

      firewall-cmd --permanent --add-port=8285/tcp 
firewall-cmd --reload

Я столкнулся с такими же ошибками, я видел проблему после того, как подчиненный узел присоединился к кластеру. Подчиненный узел показывал статус "Не готов" после присоединения.

Я проверил kubectl describe node ksalveи заметил упомянутую проблему. Покопавшись глубже, я обнаружил, чтоsystemdотличался в главном и подчиненном узле. В мастере я настроилsystemd однако раб по умолчанию cfgroup только.

Как только я удалил systemd с главного узла статус подчиненного сразу изменился на Ready.

Моя проблема заключалась в том, что я обновлял имя хоста после создания кластера. Делая это, создается впечатление, что мастер не знал, что это мастер.

Я все еще бегаю:

sudo hostname $(curl 169.254.169.254/latest/meta-data/hostname)[1][2]

но теперь я запускаю его перед инициализацией кластера

Ошибка, которая привела меня к этому от запуска sudo journalctl -u kubelet:

      Unable to register node "ip-10-126-121-125.ec2.internal" with API server: nodes "ip-10-126-121-125.ec2.internal" is forbidden: node "ip-10-126-121-125" cannot modify node "ip-10-126-121-125.ec2.internal"

Это может быть сложно. Я потратил на это часы, но у меня сработало то, что я понизил версию containerd-runtime вместо использования последней версии. Возможно, такая же работа при использовании docker-latest в качестве среды выполнения контейнера.

Это для AWS VPC CNI

  1. Шаг 1: kubectl получить mutatingwebhookconfigurations -oyaml>mutating.txt

  2. Шаг 2: Kubectl delete -f mutating.txt

  3. Шаг 3: перезапустите узел

  4. Шаг 4: вы должны увидеть, что узел готов

  5. Шаг 5. Установите измененную конфигурацию веб-перехватчика обратно.

Другие вопросы по тегам