Рейтинг:0

Чистая установка Kubernetes на Raspberry Pi не работает

флаг cn

Я пытаюсь выполнить чистую установку Kubernetes 1.23.x в кластере из четырех Raspberry Pi, каждый из которых работает под управлением x64-версии ОС Raspberry Pi, однако я сталкиваюсь с серьезной проблемой, как только пытаюсь запустить инициализация кубеадм на главном узле (еще до того, как попытаться подключить другие узлы). А именно: всего через пять минут после звонка инициализация кубеадм на главном узле кластер перестает работать. На самом деле, это никогда не работает с самого начала. Сначала сервер отвечает, что узел NotReady, но через 5 минут вообще перестает отвечать.

Итак, вот что я сделал и что увидел: я установил containerd и kubeadm. Затем я запускаю следующую команду на главном узле, чтобы попытаться запустить Kubernetes:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
    --token-ttl=0 --apiserver-advertise-address=192.168.1.194

После запуска этой команды и последующего копирования файла /etc/kubernetes/admin.conf в ~/.kube/config я могу выполнить следующую команду:

$ kubectl получить узлы

ИМЯ СТАТУС РОЛИ ВОЗРАСТ ВЕРСИЯ
k8s-master-1 NotReady control-plane, master 3m36s v1.23.4

И он будет продолжать показывать статус NotReady в течение примерно 5 минут, после чего та же команда дает совсем другой результат:

$ kubectl получить узлы

В соединении с сервером 192.168.1.194:6443 было отказано - вы указали правильный хост или порт?

Я не уверен, почему это происходит, но это очень последовательно. Я уже несколько раз пытался сброс кубеадм а потом инициализация кубеадм снова, и тайм-аут соединения всегда происходит на 5-минутной отметке. Итак, в последний раз, когда я пытался это сделать, я решил спрятать все файлы журналов под /var/лог/контейнеры/. После 5-минутной отметки он неоднократно регистрирует некоторые варианты ошибок подключения к 127.0.0.1:2379. Например:

2022-03-09T19:30:29.307156643-06:00 stderr F W0310 01:30:29.306871 1 clientconn.go:1331] [ядро] grpc: addrConn.createTransport не удалось подключиться к {127.0.0.1:2379 127.0.0.1 0 }. Err: ошибка соединения: desc = "транспорт: ошибка при наборе номера tcp 127.0.0.1:2379: соединение: соединение отклонено". Повторное подключение...

Из Google видно, что на этом порту работает etcd, но через 5 минут несколько служб (включая etcd) начинают отключаться. Я загрузил полные журналы с того времени инициализация кубеадм работает, вплоть до страшной 5-минутной отметки, как суть.

Я уже проверил, что все порты тоже открыты. (Они есть.) В течение этих первых пяти минут я могу подключиться к локальному порту 2379 по телнету. Почему Kubernetes не запускается на моем Pi? Что мне не хватает?

ОБНОВИТЬ: В соответствии с просьбой, я могу предоставить более подробную информацию. Я видел сообщение, рекомендующее установить значение --apiserver-рекламный-адрес к 0.0.0.0 вместо прямого IP, поэтому я попробовал это, но, похоже, это не имело значения. я пытался бежать статус systemctl кубелет который показывает, что служба kubelet «активна» в течение этого начального 5-минутного периода.

я тоже побежал kubectl описывает узел k8s-master-1, который показывает четыре события в этой последовательности:

  1. KubeletHasSufficientMemory
  2. KubeletHasNoDiskPressure
  3. KubeletHasSufficientPID
  4. KubeletNotReady

Это последнее событие сопровождается этим сообщением: «Сеть среды выполнения контейнера не готова: NetworkReady = false, причина: сообщение NetworkPluginNotReady: сетевой плагин возвращает ошибку: плагин cni не инициализирован». Так что это заставило меня задуматься. Я ждал, пока узел перейдет в состояние готовности, прежде чем устанавливать Flannel (также известный как плагин CNI), но на этот раз я решил попробовать установить Flannel в течение этого начального 5-минутного периода, используя эту команду:

kubectl применить -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

И, к моему большому удивлению, это сработало! Ну вроде. Главный узел в конце концов начал сообщать о состоянии «Готово».И я заметил, что все мои стручки подошли с заметным исключением стручков coredns. Однако через некоторое время модуль kube-proxy (в пространстве имен kube-system) умирает и застревает в CrashLoopBackoff, а еще позже модули kube-controller-manager и kube-scheduler аналогичным образом входят в CrashLoopBackoff. Затем, на этот раз, примерно через 15 минут, весь кластер снова умер, как и раньше (это означает, что я получил то же сообщение «отказано в подключении к серверу»). Так что я чувствую, что я немного ближе, но все еще далек от того, чтобы заставить это работать.

ВТОРОЕ ОБНОВЛЕНИЕ: Пара вещей: кажется, что когда я устанавливаю плагин CNI для фланели, coredns либо не включается, либо не работает. Но когда я устанавливаю Weave Works CNI, он, по крайней мере, пытается раскрутить coredns, хотя, к сожалению, эти модули застревают в ContainerCreating и никогда не активируются. Поэтому по запросу я предоставляю ряд дополнительных журналов. Они достаточно длинные, чтобы загружать их отдельно, так что вот ссылка на гист содержащий четыре журнала:

  1. Бег kubectl -n kube-системные журналы pod/coredns-...
  2. Бег kubectl -n kube-system logs pod/kube-controller-manager-k8s-master-1
  3. Бег kubectl -n kube-system logs pod/kube-proxy-...
  4. Бег kubectl описывает узел k8s-master-1

Обратите внимание, что перед тем, как все умрет, модуль kube-controller-manager-... запускается, но вскоре оказывается в CrashLoopBackoff. В то время как модули coredns вообще никогда не запускаются успешно.

tilleyc avatar
флаг us
Что показывает dmesg или syslog?
mozello avatar
флаг cn
Запустите `kubectl описать узел nodename`, чтобы проверить, почему узел не готов. Проверьте `systemctl status kubelet` и `journalctl -u kubelet`. Вы отключили обмен?
флаг cn
@mozello Я обновил свой исходный пост, добавив более подробную информацию в соответствии с вашими рекомендациями.
mozello avatar
флаг cn
Находятся ли модули coredns в состоянии «Ожидание»? Проверьте, есть ли какие-либо «загрязнения», когда вы запускаете «kubectl описать узел».
mozello avatar
флаг cn
Кроме того, добавьте журналы из модуля kube-proxy `kubectl -n kube-system logs kube-proxy-...`
флаг cn
@mozello спасибо, что связались со мной, и приносим извинения за долгую задержку. Я отредактировал свой исходный пост, добавив несколько дополнительных журналов в ссылку Gist в конце. Я очень ценю, что вы смотрите на это!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.