Рейтинг:1

Сервер API Kubernetes не может зарегистрировать главный узел

флаг gb

Я пытался создать кластер Kubernetes с помощью kubeadm. Я раскрутил сервер Ubuntu 18.04, установил докер (убедился, что docker.service запущен), установил kubeadm kubelet и kubectl.

Ниже приведены шаги, которые я сделал:

sudo apt-получить обновление
sudo apt установить apt-transport-https ca-сертификаты curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-ключ добавить -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu `lsb_release -cs` test"
судо подходящее обновление
sudo apt установить docker-ce
sudo systemctl включить докер
sudo systemctl запустить докер

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-ключ добавить
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get установить kubeadm kubelet kubectl -y
sudo apt-mark удерживать kubeadm kubelet kubectl 
версия kubeadm
обмен âa

Кроме того, для настройки драйвера cgroup Docker я отредактировал /etc/systemd/system/kubelet.service.d/10-kubeadm.conf. В файле я добавил Среда = "KUBELET_CGROUP_ARGS = -- cgroup-driver = systemd" и закомментировал Среда="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml".

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf для справки:

# Примечание. Этот дропин работает только с kubeadm и kubelet v1.11+.
[Оказание услуг]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
#Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Среда = "KUBELET_CGROUP_ARGS = -- cgroup-driver = systemd"
# Это файл, который "kubeadm init" и "kubeadm join" генерируют во время выполнения, динамически заполняя переменную KUBELET_KUBEADM_ARGS.
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# Это файл, который пользователь может использовать для переопределения аргументов kubelet в крайнем случае. Желательно, чтобы пользователь использовал
# вместо этого объект .NodeRegistration.KubeletExtraArgs в файлах конфигурации. KUBELET_EXTRA_ARGS должен быть получен из этого файла.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

После этого я побежал: systemctl демон-перезагрузка и systemctl перезапустить кубелет. kubelet.service работал нормально.

Далее я побежал sudo kubeadm init --pod-network-cidr=10.244.0.0/16 и получил следующую ошибку:

root@ip-172-31-1-238:/home/ubuntu# kubeadm init --pod-network-cidr=10.244.0.0/16
[init] Использование версии Kubernetes: v1.23.1
[preflight] Запуск проверки перед полетом
[preflight] Извлечение изображений, необходимых для настройки кластера Kubernetes
[предварительная проверка] Это может занять минуту или две, в зависимости от скорости вашего интернет-соединения.
[preflight] Вы также можете выполнить это действие заранее, используя «вытягивание образов конфигурации kubeadm»
[certs] Использование папки certificateDir «/etc/kubernetes/pki»
[certs] Создание сертификата и ключа «ca»
[certs] Генерация сертификата и ключа "apiserver"
[certs] apiserver, обслуживающий сертификат, подписан для DNS-имен [ip-172-31-1-238 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] и IP-адресов [10.96.0.1 172.31.1.238]
[certs] Генерация сертификата и ключа «apiserver-kubelet-client»
[certs] Генерация сертификата и ключа «front-proxy-ca»
[certs] Генерация сертификата и ключа «front-proxy-client»
[certs] Создание сертификата и ключа «etcd/ca»
[certs] Генерация сертификата и ключа «etcd/server»
[certs] сертификат etcd/server, обслуживающий сервер, подписан для DNS-имен [ip-172-31-1-238 localhost] и IP-адресов [172.31.1.238 127.0.0.1 ::1]
[certs] Генерация сертификата и ключа «etcd/peer»
[certs] сертификат etcd/peer service подписан для DNS-имен [ip-172-31-1-238 localhost] и IP-адресов [172.31.1.238 127.0.0.1 ::1]
[certs] Генерация сертификата и ключа «etcd/healthcheck-client»
[certs] Создание сертификата и ключа «apiserver-etcd-client»
[certs] Генерация ключа «sa» и открытого ключа
[kubeconfig] Использование папки kubeconfig «/etc/kubernetes»
[kubeconfig] Запись файла kubeconfig «admin.conf»
[kubeconfig] Запись файла kubeconfig «kubelet.conf»
[kubeconfig] Запись файла kubeconfig «controller-manager.conf»
[kubeconfig] Запись файла kubeconfig «scheduler.conf»
[kubelet-start] Запись файла среды kubelet с флагами в файл «/var/lib/kubelet/kubeadm-flags.env»
[kubelet-start] Запись конфигурации kubelet в файл «/var/lib/kubelet/config.yaml»
[kubelet-start] Запуск kubelet
[control-plane] Использование папки манифеста «/etc/kubernetes/manifests»
[control-plane] Создание статического манифеста пода для «kube-apiserver»
[control-plane] Создание статического манифеста пода для «kube-controller-manager»
[control-plane] Создание статического манифеста Pod для «kube-scheduler»
[etcd] Создание статического манифеста Pod для локального etcd в «/etc/kubernetes/manifests»
[wait-control-plane] Ожидание загрузки kubelet плоскости управления в виде статических подов из каталога «/etc/kubernetes/manifests». Это может занять до 4 минут
[kubelet-check] Первоначальный тайм-аут в 40 секунд пройден.

    К сожалению, произошла ошибка:  
            истекло время ожидания условия  

    Эта ошибка, вероятно, вызвана:  
            - Кубелет не запущен  
            - Кублет неисправен из-за неправильной настройки узла (необходимые cgroups отключены)  

    Если вы работаете в системе на основе systemd, вы можете попытаться устранить ошибку с помощью следующих команд:  
            - 'кубелет статуса systemctl'  
            - 'journalctl -xeu кубелет'  

    Кроме того, компонент плоскости управления мог аварийно завершать работу при запуске средой выполнения контейнера.  
    Чтобы устранить неполадки, перечислите все контейнеры, используя предпочитаемый интерфейс командной строки среды выполнения контейнеров.  

    Вот один пример того, как вы можете перечислить все контейнеры Kubernetes, работающие в докере:  
            - 'докер ps -a | grep куб | grep -v пауза'  
             Как только вы нашли неисправный контейнер, вы можете проверить его журналы с помощью:  
            - 'журналы докера CONTAINERID'  

После запуска статус systemctl kubelet.service, кажется, что kubelet работает нормально.
Однако после запуска журналctl -xeu кубелет, я получил следующие журналы:

kubelet.go:2347] «Сеть выполнения контейнера не готова» networkReady="NetworkReady=false причина: сообщение NetworkPluginNotReady: docker: сетевой плагин не готов: конфигурация cni не инициализирована"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
controller.go:144] не удалось убедиться в наличии аренды, повторная попытка через 7 секунд, ошибка: Get "https://172.31.1.238:6443/apis/coordinate.k8s.io/v1/namespaces/kube-node-lease/leases /ip-172-31-1-238?timeout=10s": наберите tcp 172.31.1.238:6443: соединение: соединение отклонено
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"
kubelet_node_status.go:70] "Попытка зарегистрировать узел" node="ip-172-31-1-238"
kubelet_node_status.go:92] «Невозможно зарегистрировать узел на сервере API» err = «Сообщение «https://172.31.1.238:6443/api/v1/nodes»: наберите tcp 172.31.1.238:6443: соединение: соединение отклонено» узел = "ip-172-31-1-238"
kubelet.go:2422] "Ошибка при получении узла" err="узел "ip-172-31-1-238" не найден"

Версии:
Докер: Докер версии 20.10.12, сборка e91ed57
Кубадм: {Major: "1", Minor: "23", GitVersion: "v1.23.1", GitCommit: "86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState: "clean", BuildDate: "2021-12-16T11:39:51Z", GoVersion:" go1.17.5", компилятор: "gc", платформа: "linux/amd64"}

Не уверен, что это проблема соединения между сервером Kube Api и Kubelet.
Кто-нибудь знает, как это исправить?

Рейтинг:1
флаг br

Здесь используется версия kubeadm 1.23.1. Kubernetes больше не поддерживает Docker напрямую. читать здесь. В моем понимании, у вас оба установлены, но они не подключены. Также я не вижу, чтобы в команде установки докера был указан containerd.io. Обратитесь сюда.

Вариант 1: Установите contianerd. Пожалуйста, выполните этот шаг. Если проблема не устранена, настройте службу kubelet для использования containerd, добавив следующие параметры в службу kubelet.

--container-runtime=удаленный --container-runtime-endpoint=unix:///run/containerd/containerd.sock

Вариант 2. Установите докер правильно и настройте, как указано. здесь.

arjunbnair avatar
флаг gb
Спасибо, это было действительно полезно.
Rajesh Dutta avatar
флаг br
@arjunbnair, если этот ответ помог вам, то я думаю, вы можете пометить его как принятый ответ, чтобы другие пользователи могли быть уверены в этом ответе и контексте. Спасибо.
Рейтинг:0
флаг gb

Я исправил это, изучив официальную документацию Kubernetes по созданию кластера с использованием kubeadm. Ниже приведены шаги, которые я выполнил:

#!/бин/баш

обновление sudo apt -y && обновление sudo apt -y
sudo apt-get install -y ca-certificates curl gnupg lsb-release

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) стабильный" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get установить docker.io -y
systemctl включить docker.service
systemctl запустить docker.service

эхо 1 > /proc/sys/net/ipv4/ip_forward
lsmod | grep br_netfilter
sudo modprobe br_netfilter

кошка <<ЕОФ | sudo тройник /etc/modules-load.d/k8s.conf
br_netfilter
EOF

кошка <<ЕОФ | тройник судо /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --система

кошка <<ЕОФ | судо тройник /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "журнал-драйвер": "json-файл",
  "журнал-опций": {
    "максимальный размер": "100 м"
  },
  "драйвер хранилища": "overlay2"
}
EOF
sudo systemctl включить докер
sudo systemctl демон-перезагрузка
sudo systemctl перезапустить докер

sudo apt-получить обновление -y
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo тройник /etc/apt/sources.list.d/kubernetes.list
sudo apt-получить обновление -y
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark удерживать kubelet kubeadm kubectl
sudo hostnamectl set-hostname master-node

kubeadm init --pod-network-cidr=10.244.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
экспорт KUBECONFIG=/etc/kubernetes/admin.conf

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

Это можно запустить на сервере Ubuntu 20.04, как сценарий оболочки, и будет создан главный узел.

Протестировано на версия kubeadm: 1.23.1
Протестировано на версия кубернета: 1.23.1
Среда выполнения контейнера: Докер

Ссылка на документ:

Рейтинг:0
флаг cn

Проблема в том, что вы не указываете adsAddress. У меня такая же проблема, и мне нужно пару часов, чтобы найти ее.

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

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