Загрузка...

Блог

Устранение неполадок Kubernetes: сеть, GPU, образы

Устранение неполадок Kubernetes: сеть, GPU, образы

Краткий runbook по типичным проблемам после установки Kubernetes на Rocky Linux 9: кластер не поднимается, Forbidden, поды не могут достучаться до API, NodePort не работает, GPU недоступны, образы не тянутся.

Сводка: проблема → действие

ПроблемаПервые шаги
Кластер не запускаетсяsystemctl status kubelet, journalctl -u kubelet; настройка сети — см. статью «Настройка сети в Kubernetes»
Forbidden при kubectlKUBECONFIG=/etc/kubernetes/super-admin.conf или копия в ~/.kube/config
Поды не достучаться до APIПроверить kubernetes svc, CoreDNS, Flannel, subnet.env; скрипт настройки — статья «Настройка сети в Kubernetes»
NodePort не работаетПроверить kube-proxy, логи, ipvsadm
GPU недоступныnvidia-smi; настройка runtime и Device Plugin — примеры в статье «GPU в Kubernetes: NVIDIA runtime и Device Plugin»
Образы не загружаютсяПрокси или импорт из Docker — см. «Прокси для containerd и работа с образами»
Полная переустановкаПолное удаление и установка заново — см. статьи «Удаление и переустановка кластера» и «Установка single-node кластера»

Кластер не запускается

Последовательность диагностики:

systemctl status kubelet
journalctl -u kubelet -n 100 --no-pager
kubectl get pods -n kube-system
kubectl get nodes

Если kubelet не активен или поды в состоянии Pending/CrashLoopBackOff — смотрите логи journalctl -u kubelet -f. При проблемах с сетью выполните настройку (скрипт в статье «Настройка сети в Kubernetes: Flannel, CoreDNS, kube-proxy»).

Forbidden при kubectl

Укажите kubeconfig или скопируйте его для текущего пользователя:

export KUBECONFIG=/etc/kubernetes/super-admin.conf
# или один раз скопировать:
mkdir -p ~/.kube
sudo cp /etc/kubernetes/super-admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config

Поды не подключаются к API (i/o timeout)

Проверка сервиса и компонентов сети:

kubectl get svc kubernetes -n default
kubectl get endpoints kubernetes
kubectl get pods -n kube-system | grep -E 'coredns|flannel|proxy'
cat /run/flannel/subnet.env 2>/dev/null || echo "Файл subnet.env отсутствует"

Если /run/flannel/subnet.env нет или поды coredns/flannel не в Running — выполните настройку сети (см. статью «Настройка сети в Kubernetes»). Перезапуск подов: kubectl delete pod -n kube-system -l k8s-app=kube-dns, затем то же для k8s-app=kube-proxy и подов в kube-flannel.

NodePort не работает

Проверка kube-proxy и IPVS:

kubectl get pods -n kube-system -l k8s-app=kube-proxy
kubectl logs -n kube-system -l k8s-app=kube-proxy --tail=30
ipvsadm -ln
# на узле с подом: curl или wget на NodePort (замените NODE_IP и PORT)
curl -s -o /dev/null -w "%{http_code}" http://NODE_IP:30080

GPU недоступны

Проверка на узле и в кластере:

nvidia-smi
kubectl get nodes -o wide
kubectl get pods -n kube-system | grep nvidia
kubectl describe node | grep -A2 nvidia.com/gpu

Если nvidia-smi работает, но в kubectl describe node нет nvidia.com/gpu — настройте NVIDIA runtime и Device Plugin (примеры в статье «GPU в Kubernetes: NVIDIA runtime и Device Plugin»).

Образы не загружаются

Проверка образов и прокси:

crictl images
kubectl describe pod -n NAMESPACE POD_NAME | grep -A5 Events
# если образы собирались в Docker и кластер на containerd — импорт (см. статью про прокси и образы):
# docker save image:tag | sudo ctr -n=k8s.io images import -

При доступе только через прокси — настройка в статье «Прокси для containerd и работа с образами». При образах из Docker — импорт описан там же.

Полная переустановка

Сначала полное удаление (скрипт в статье «Удаление и переустановка кластера Kubernetes»), затем установка заново — «Установка single-node кластера Kubernetes». Кратко:

# 1) Удаление (от root): выполнить скрипт из статьи «Удаление и переустановка кластера»
# 2) Установка заново: выполнить шаги из статьи «Установка single-node кластера Kubernetes»
kubectl get nodes   # проверка после установки

Итого: Сеть — настройка сети и subnet.env (скрипты в соответствующих статьях); права — super-admin.conf; GPU — runtime и Device Plugin (примеры в статье); образы — прокси или импорт из Docker (см. статью про прокси и образы).