Сбои control plane Kubernetes: симптомы и устранение непол... | Вопросы для собеседования | Skilio
/s/public
DevOps Средний Опубликовано
Сбои 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

Ошибки планировщика

  • Последствия: Новые поды остаются в состоянии 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

Ошибки 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

Продвинутые методы диагностики

  • Использовать закрытие трафика во время перезапуска 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
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.