Сбои control plane Kubernetes: симптомы и устранение неполадок
Вопрос:
Опиши свой подход к диагностике и устранению неполадок в контрольной панели (control plane) Kubernetes.
Подсказки:
- Давайте поговорим об этом для планировщика, API-сервера, etcd и так далее.
- Как посмотреть журналы (логи) компонентов?
/var/log/pods
или использоватьkubectl logs
подов - Понять статус выбора лидера для конфигурации высокой доступностью
- Проверить доступность API-сервера с помощью команд
kubectl
или прямых вызовов API - Поискать паттерны ошибок в журналах etcd, которые могут повлиять на компоненты контрольной панели
- Изучить лимиты ресурсов и метрики производительности
Выше ожиданий:
- Понимание механизмов выбора лидера черезj блокировку конечных точек (endpoint leases)
- Снятие трафика с API-сервера во время перезапусков и шаблоны плавного (graceful) выключения.
- Умение использования и знание метрик контрольной панели через metrics server и специфичные для компонента health эндпоинты.
Ответ:
Ошибки API-сервера
- Последствия: Все операции кластера останавливаются, команды
kubectl
терпят неудачу, контроллеры не могут согласовать состояние. - Проявление: Ошибки HTTP 500/503, таймауты соединения, ошибки команд
kubectl
. - Диагностика (команды не обязательны):
- Проверьте логи API-сервера:
kubectl logs -n kube-system kube-apiserver-<node-name>
- Проверьте актуальность сертификата:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text
- Проверьте конечную точку API-сервера:
curl -k https://<master-ip>:6443/healthz
- Просмотреть использование ресурсов:
kubectl top pod -n kube-system
- Проверьте логи API-сервера:
Ошибки планировщика
- Последствия: Новые поды остаются в состоянии Pending, не происходит назначение узла.
- Проявление: Поды застревают в состоянии pending с сообщением "ожидание планировщика".
- Диагностика (команды не обязательны):
- Проверьте логи планировщика:
kubectl logs -n kube-system kube-scheduler-<node-name>
- Проверьте статус подов планировщика:
kubectl get pods -n kube-system | grep scheduler
- Проверьте статус выбора лидера в кластерах с высокой доступностью:
kubectl get endpoints kube-scheduler -n kube-system -o yaml
- Создать тестовый pod для подтверждения работы планировщика и посмотреть на логи и результат работы.
- Проверьте логи планировщика:
Ошибки Controller Manager
- Последствия: Циклы согласования (reconcilation) (контроллеры узлов, репликации, развертывания) останавливаются.
- Проявление: Реплики не масштабируются, узлы не обновляют статус, не устраняются неисправные поды.
- Диагностика (команды не обязательны):
- Проверить логи controller manager:
kubectl logs -n kube-system kube-controller-manager-<node-name>
- Проверить выборы лидера в мульти-мастер инсталляции:
kubectl get endpoints kube-controller-manager -n kube-system -o yaml
- Посмотреть метрики, специфичные для контроллера:
curl -k https://<master-ip>:10257/metrics
- Проверить логи controller manager:
Ошибки etcd
- Последствия: Недоступность хранилища данных влияет на все операции, API-сервер становится только для чтения или выходит из строя.
- Проявление: Ошибки API-сервера связанные с хранилищем, медленные ответы API, несогласованное состояние кластера.
- Диагностика (команды не обязательны):
- Проверьте логи etcd:
kubectl logs -n kube-system etcd-<node-name>
- Проверьте состояние кластера etcd:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint health
- Просмотреть метрики etcd:
curl -L http://localhost:2379/metrics
- Проверьте задержки (latency) дисков:
iostat -xz 1
- Проверьте логи etcd:
Продвинутые методы диагностики
- Использовать закрытие трафика во время перезапуска API-сервера, отслеживать период его завершения (grace period)
kube-apiserver-<node-name>
. - Проверите lease на конечные точки для выборов лидера:
kubectl get leases -A
- Проверяйте метрики компонентов control plane:
curl -k https://<master-ip>:6443/metrics curl -k https://<master-ip>:10259/metrics # планировщик curl -k https://<master-ip>:10257/metrics # контроллер-менеджер
- Проверить распределение ресурсов control plane для предотвращения голодания по ресурсам.
- Использовать pprof для профилирования производительности:
curl -k https://<master-ip>:6443/debug/pprof/heap > heap.out
0