Kubelet находится в рабочем состоянии, но kubectl выдает ошибку отказа в подключении к серверу.

Вопрос или проблема

Кластер Kubernetes работал нормально ранее. Начались проблемы с выполнением команд kubectl после перезагрузки мастер-узла (1.0.0.0). При выполнении команды kubectl get nodes я получаю следующую ошибку.

# kubectl get nodes
The connection to the server 1.0.0.0:6443 was refused - did you specify the right host or port?

При подключении к мастер-узлу (1.0.0.0) порт 6443 не открыт для приёма соединений. netstat -lntp|grep 6443 не даёт никакого вывода. Сервис kubelet в рабочем состоянии, вывод systemctl status kubelet не показывает ничего подозрительного.

Попробовал перезапустить сервис kubelet, но безуспешно. Также пробовал swapoff -a перед перезапуском сервиса kubelet.

Я упускаю какой-то другой сервис, который принимает соединения на порту 6443, или это работа kubelet, но он не выполняет её? Пожалуйста, помогите.

Примечание: IP-адрес замаскирован как 1.0.0.0, фактический IP отличается. Везде используется только Centos.

Проверьте возможные решения ниже:

Сначала просмотрите журналы вывода journalctl -xeu kubelet, проверьте, если error while dialing dial unix /var/run/cri-dockerd.sock: connect: no such file or directory, затем перезапустите и включите cri-dockerd службы как показано ниже:

sudo systemctl enable cri-dockerd.service
sudo systemctl restart cri-dockerd.service then
sudo systemctl start kubelet

Это может сработать, пожалуйста, пройдите по ссылке на github для получения дополнительной информации.

1) Переменная окружения Kubeconfig, вероятно, не установлена. export KUBECONFIG=/etc/kubernetes/admin.conf или $HOME/.kube/config

2) В домашнем каталоге пользователя нет файла .kube/config. Если у вас нет .kube или файла config

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

Также вы можете экспортировать переменную KUBECONFIG таким образом:

export KUBECONFIG=$HOME/.kube/config

3) Сервер/порт, указанный в конфигурационном файле выше, неверен. Совпадает ли он с IP/именем хоста мастер-сервера? если нет, скопировали вы его? Возможно, стоит это исправить.

Вы можете получить имя хоста, выполнив команду hostname в вашей командной строке. или ifconfig для IP.

4) Сервис Docker может быть отключен, поэтому pod kubeapi не работает

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

5) Сервис kubelet может быть отключен. Это может быть связано с тем, что swap включен:

  • sudo -i
  • swapoff -a
  • exit
  • strace -eopenat kubectl version

и вы можете снова ввести kubectl get nodes, как показано ниже.

enter image description here

6) Может быть другая причина ‘недостаточно места на диске’:

Проверьте “df -h”, нет overlay или shm (монтированы на /var/lib/docker…), пока вы не увеличите свободное место на диске.

7) Следуйте приведенному ниже подобному процессу для решения вашей проблемы

мастер

kubeadm reset kubeadm init –pod-network-cidr=192.168.0.0/16 –apiserver-advertise-address=192.168.211.40 — kubernetes-version=v1.18.0

    kubeadm join 192.168.211.40:6443 --token s7apx1.mlxn2jkid6n99fr0 \
        --discovery-token-ca-cert-hash sha256:2fa9da39110d02efaf4f8781aa50dd25cce9be524618dc7ab91a53e81c5c22f8 

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

node1

$ kubeadm reset
$ kubeadm join 192.168.211.40:6443 --token s7apx1.mlxn2jkid6n99fr0 \
    --discovery-token-ca-cert-hash sha256:2fa9da39110d02efaf4f8781aa50dd25cce9be524618dc7ab91a53e81c5c22f8 

node2

$ kubeadm reset
$ kubeadm join 192.168.211.40:6443 --token s7apx1.mlxn2jkid6n99fr0 \
    --discovery-token-ca-cert-hash sha256:2fa9da39110d02efaf4f8781aa50dd25cce9be524618dc7ab91a53e81c5c22f8 

мастер

$ kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   5m18s   v1.18.6
node1    Ready    <none>   81s     v1.18.6
node2    Ready    <none>   43s     v1.18.6
$ scp /root/.kube/config [email protected]:/root/.kube/config
$ scp /root/.kube/config [email protected]:/root/.kube/config

8) Пожалуйста, попробуйте это, если у вас все еще есть проблема:

iptables может вызвать проблемы после перезагрузки вашей инстанции.

sudo su
iptables -P INPUT ACCEPT ALL
iptables -F

Также обратитесь к этому документу, в котором описываются шаги для устранения ошибки kubectl для получения дополнительной информации.

Также проверьте это подобное SO для получения дополнительной информации.

попробуйте sudo nano /etc/containerd/config.toml Затем найдите SystemdCgroup и измените его значение с false на true

sudo systemctl restart containerd;sudo reboot Проверьте подробности: https://gjhenrique.com/cgroups-k8s/ https://discuss.kubernetes.io/t/why-does-etcd-fail-with-debian-bullseye-kernel/19696

.

Ответ или решение

Когда Kubernetes-кластер, который ранее работал исправно, начинает выдавать ошибку "connection to the server refused", несмотря на то, что Kubelet находится в состоянии "running", это может указывать на несколько потенциальных проблем. Давайте рассмотрим, что может вызвать такие сбои и как их исправить.

Факторы и решения

Фактор 1: Неверные настройки Kubeconfig

Первым делом, проверьте, правильно ли установлена переменная окружения KUBECONFIG. Она должна вести к файлу admin.conf на мастер-узле:

export KUBECONFIG=/etc/kubernetes/admin.conf

Если у вас отсутствует файл .kube/config в домашнем каталоге, создайте его следующим образом:

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

Фактор 2: Проблемы с kube-apiserver

Если при проверке порта 6443 с помощью netstat вы не видите его в списке, это может указывать на то, что kube-apiserver не запущен. Проверьте состояние компонентов Kubernetes на мастер-узле:

sudo systemctl status kube-apiserver

Если сервис не запущен, попробуйте его перезапустить:

sudo systemctl restart kube-apiserver

Фактор 3: Docker или Containerd

Убедитесь, что Docker или Containerd работает корректно, так как они необходимы для запуска Kubernetes:

sudo systemctl status docker
sudo systemctl restart docker

Если вы используете Containerd, проверьте следующий файл:

sudo nano /etc/containerd/config.toml

Убедитесь, что параметр SystemdCgroup установлен в true и перезапустите Containerd:

SystemdCgroup = true
sudo systemctl restart containerd
sudo reboot

Фактор 4: Проблемы с iptables

После перезагрузки возможно возникновение проблем с iptables, что может блокировать соединение по порту 6443:

sudo iptables -P INPUT ACCEPT
sudo iptables -F

Фактор 5: Перезапуск Kubectl и Kubelet

После выполнения вышеизложенных шагов, выполните перезапуск kubectl и kubelet для гарантии:

sudo systemctl restart kubelet

Фактор 6: Проверка дискового пространства

Недостаток дискового пространства может вызвать сбои в работе Kubernetes. Проверьте его с помощью:

df -h

Если свободного места недостаточно, увеличьте его.

Завершение

После выполнения всех этапов проверьте снова через:

kubectl get nodes

Если проблема не была решена, возможно потребуется перепроверить процедуру инициирования kubeadm или обратиться к документации и сообществам Kubernetes для получения более детализированной информации.

Эти шаги должны помочь в выявлении и устранении проблемы с отказом соединения на порту 6443, что повысит стабильность и работоспособность вашего Kubernetes-кластера.

Оцените материал
Добавить комментарий

Капча загружается...