kube-apiserver не запускается: отладка и решения
kube-apiserver — это сердце кластера Kubernetes.
Если он не работает, control plane становится недоступным: kubectl
и контроллеры перестают функционировать.
Разберём основные причины и шаги диагностики.
Симптомы
- Все команды
kubectl
возвращают ошибки соединения. - В
kubectl get pods -n kube-system
видно, что kube-apiserver вCrashLoopBackOff
. - В логах встречаются ошибки:
etcd connection refused
,не удалось занять порт 6443
,certificate expired
.
Возможные причины и решения
1. Конфликт порта
По умолчанию API server слушает на 6443.
Если порт занят, процесс не запустится.
Решение:
sudo lsof -i :6443
Освободите порт или измените конфигурацию.
2. Ошибки в манифесте
В kubeadm-кластерах apiserver запускается как static pod (/etc/kubernetes/manifests/kube-apiserver.yaml
).
Неверные параметры не дадут процессу стартовать.
Решение:
Проверить ключи --etcd-servers
, --client-ca-file
, and --kubelet-client-certificate
.
3.Проблемы с ETCD
Без работающего etcd API server не может хранить состояние.
Решение:
Проверить состояние etcd:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 endpoint health
4. Сертификаты
Просроченные или отсутствующие сертификаты приводят к падению.
Решение:
Проверить пути к сертификатам в манифесте kube-apiserver.yaml
.
При необходимости обновить через kubeadm:
kubeadm certs renew apiserver
5. Нехватка ресурсов
При нехватке CPU или памяти apiserver может быть убит системой.
Решение:
Check logs:
dmesg | grep -i kill
увеличить ресурсы.
Checklist
- Проверить логи API server
- Проверить манифесты
/etc/kubernetes/manifests/kube-apiserver.yaml
. - Проверить доступность etcd.
- Убедиться в валидности сертификатов.
- Исключить конфликты портов.
Проверить /etc/kubernetes/manifests/kube-apiserver.yaml.
Итог
kube-apiserver — это точка входа в Kubernetes. Если он не запускается, кластер фактически “падает”. Основные причины: ошибки в конфигурации, проблемы с etcd, некорректные сертификаты. Пошаговая проверка поможет быстро восстановить доступность.