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.
Это была ошибка прокси, как упоминалось в 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: kubectl получить mutatingwebhookconfigurations -oyaml>mutating.txt
Шаг 2: Kubectl delete -f mutating.txt
Шаг 3: перезапустите узел
Шаг 4: вы должны увидеть, что узел готов
Шаг 5. Установите измененную конфигурацию веб-перехватчика обратно.