Рейтинг:2

Как настроить Kubernetes для использования kubenet с kubeadm?

флаг in

Я развернул кластер Kubernetes, используя кубадм.

$ kubectl получить узлы
ИМЯ СТАТУС РОЛИ ВОЗРАСТ ВЕРСИЯ
ip-172-31-33-9.us-east-2.compute.internal NotReady <нет> 48 м v1.22.2
ip-172-31-46-53.us-east-2.compute.internal NotReady control-plane, master 49m v1.22.2
ip-172-31-47-245.us-east-2.compute.internal NotReady <нет> 6s v1.22.2

Узлы Не готов потому что я не установил сетевой плагин. Я хочу использовать все просто и использовать кубенет. инструкции сказать:

Kubelet нужно запускать с аргументом --network-plugin=kubenet, чтобы включить плагин

но я не могу понять, как это сделать. Я пытался добавить его в различные файлы конфигурации, такие как /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf и /etc/sysconfig/кубелет, и перезагружаю kubelet, но ничего из этого не работает.

Как я использую кубенет с кубадм?

флаг in
Привет, Тимкай, добро пожаловать в S.F. Вы сказали, что «пробовали», но «ничего не работает», но при этом не поделились с нами ни одной из своих попыток, чтобы оценить, что вы уже пробовали и почему это может не работать. Пожалуйста, прочтите страницу [как спросить](https://serverfault.com/help/how-to-ask). В духе попытки быть немного полезным, вы не забыли запустить `systemctl daemon-reload` между правками? systemd не использует последние значения на диске — его необходимо принудительно перечитать. Удачи!
флаг in
Как я уже сказал, в документации сказано добавить `--network-plugin=kubenet` в командную строку kubelet, но у меня никогда не было командной строки kubelet, так как kubelet запускается kubeadm. Таким образом, у меня нет никаких попыток поделиться с вами.
Рейтинг:1
флаг in

Вы можете использовать /etc/по умолчанию/кубелет файл для переопределения аргументов kubelet. Как можно найти в 10-kubeadm.conf файл:

...
# Это файл, который пользователь может использовать для переопределения аргументов kubelet в крайнем случае. Желательно, чтобы пользователь использовал
# вместо этого объект .NodeRegistration.KubeletExtraArgs в файлах конфигурации. KUBELET_EXTRA_ARGS должен быть получен из этого файла.
EnvironmentFile=-/etc/default/kubelet
...

Я покажу вам, как это работает.


Сначала я настроил плоскость управления Kubernetes:

# кубеадм инит
[init] Использование версии Kubernetes: v1.22.2
...

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

После успешной инициализации мы можем проверить значение --сетевой-плагин аргумент, который в настоящее время использует kubelet, и статус сердцевина Поды:

# пс вспомогательный | grep "кубелет" | grep "сетевой плагин"
корень 27488 5,1 3,6 1816612 145808 ? SSL 10:42 0:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/ kubelet/config.yaml --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.5

# kubectl get pod -n kube-system | grep "корднс"
coredns-78fcd69978-bbc52 0/1 В ожидании 0 2m26s
coredns-78fcd69978-fdcv9 0/1 В ожидании 0 2m26s

Из приведенного выше вывода мы видим, что --network-plugin=cni и сердцевина Поддоны находятся в В ожидании государство.

Давайте создадим /etc/по умолчанию/кубелет файл и пишем туда аргументы kubelet:
ПРИМЕЧАНИЕ: Возможно, вам потребуется настроить --pod-cidr и --pod-инфра-контейнер-изображение в соответствии с вашими потребностями.

# коснитесь /etc/default/kubelet

# echo 'KUBELET_KUBEADM_ARGS="--network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5"' > /etc/default /кубелет

# кошка /etc/default/kubelet
KUBELET_KUBEADM_ARGS="--network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5"

Затем нам нужно перезагрузить конфигурацию диспетчера systemd и перезапустить кубелет:

# системная перезагрузка демона
# systemctl перезапустить кубелет

Наконец, мы можем проверить, работает ли он так, как ожидалось:

# пс вспомогательный | grep "кубелет" | grep "сетевой плагин"
корень 27841 6,9 3,5 1890600 143760 ? Ssl 10:47 0:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/ kubelet/config.yaml --network-plugin=kubenet --pod-cidr=10.20.0.0/24 --pod-infra-container-image=k8s.gcr.io/pause:3.5
   
# kubectl get pod -n kube-system | grep "корднс"
coredns-78fcd69978-bbc52 1/1 Работает 0 6m51s
coredns-78fcd69978-fdcv9 1/1 Работает 0 6m51s   

# kubectl получить узлы
ИМЯ СТАТУС РОЛИ ВОЗРАСТ ВЕРСИЯ
kmaster Готовый контрольный самолет,мастер 15м v1.22.2

Вы можете выполнить эти шаги для всех ваших узлов.

Кроме того, помните, что (дополнительную информацию можно найти в кубенет документация):

Kubenet — это очень простой сетевой плагин, предназначенный только для Linux. Сам по себе он не реализует более продвинутые функции, такие как межузловая сеть или сетевая политика. Обычно он используется вместе с поставщиком облачных услуг, который устанавливает правила маршрутизации для связи между узлами или в средах с одним узлом.

Wytrzymały Wiktor avatar
флаг it
Привет @timkay и добро пожаловать в ServerFault! Не забудьте [отреагировать на ответы на ваши вопросы] (https://stackoverflow.com/help/someone-answers). Таким образом, мы узнаем, были ли ответы полезными и могут ли они быть полезны другим членам сообщества. Попробуйте [принять ответ](https://stackoverflow.com/help/accepted-answer), который является окончательным решением вашей проблемы, проголосуйте за полезные ответы и прокомментируйте те, которые можно улучшить или требуют дополнительного внимания. Наслаждайтесь пребыванием!
флаг in
Спасибо, @matt_j. Я следовал вашим инструкциям, которые я резюмировал следующим образом: 1. Устанавливаем как и раньше, используя kubeadm. 2. Создайте файл /etc/default/kubelet с дополнительными параметрами kubelet. 3. Перезапустите kubelet с помощью systemctl daemon-reload && systemctl restart kubelet. Я так и сделал, и параметры командной строки для kubelet не изменились. Переменная env KUBELET_KUBEADM_ARGS сообщает мне, что она используется kubeadm для запуска kubelet, но мы вообще не запускаем kubeadm после внесения изменений в соответствии с вашими инструкциями.
matt_j avatar
флаг in
Как вы проверили, что параметры kubelet не изменились? Не могли бы вы использовать эту команду: `ps aux | grep "кубелет" | grep "сетевой плагин"` ?
Wytrzymały Wiktor avatar
флаг it
Привет @timkay. Любые обновления?
флаг in
Я отказался от Kubernetes и написал собственную замену.
Minding avatar
флаг pl
Нет необходимости запускать `systemctl daemon-reload`, так как не изменилась конфигурация `systemd`, которую нужно было бы перезагружать. Мне также не нравится использовать `/etc/default` для пользовательских конфигураций.В остальном очень полезно, спасибо!
Minding avatar
флаг pl
На самом деле `kubeadm` ["не поддерживает kubenet"](https://unofficial-kubernetes.readthedocs.io/en/latest/getting-started-guides/kubeadm/) согласно этой вики.
Рейтинг:0
флаг jp

кубадм дает возможность использовать --config yaml файл, который задокументирован здесь. В этом файле вы можете использовать параметры cli из kubelet в качестве дополнительных аргументов, например --network-plugin=кубелет как сетевой плагин: kubelet:

Версия API: kubeadm.k8s.io/v1beta3
вид: инитконфигуратион
бутстраптокены:
...
узелРегистрация:
...
  kubeletExtraArgs:
    ...
    сетевой плагин: kubenet
    под-сидр: 10.20.0.0/24

флаг in
Kubernetes так запутался. Я давно отказался от этого и написал свою собственную замену, состоящую всего из нескольких сотен строк кода. Я очень разочарован тем, что эта отрасль выглядит как финансовая пирамида. Люди пишут сложное программное обеспечение, которое могут использовать только высококвалифицированные люди. Где мастерство? Как говорит Илон, «ни одна часть не является лучшей частью». Перестаньте решать проблемы сложности, усложняя все.
Oskar avatar
флаг jp
@timkay Верные слова, я полностью понимаю ваше утверждение :)

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

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