Контроллер не может продлить свою аренду лидера в API Kubernetes
«Failed to update lock optimistically ... falling back to slow path», «Error retrieving lease lock» и «failed to renew lease» в журналах контроллеров Kubernetes (Flux, CSI, операторы): контроллер не достучался до API-сервера. Причина обычно в перегруженном API-сервере или etcd.
Что это значит
Контроллеры в Kubernetes (Flux, драйверы хранилищ, операторы) работают в нескольких копиях, но активна одна: лидер. Лидер регулярно продлевает аренду, объект Lease в API-сервере. Если продлить не удалось за отведённое время, контроллер пишет одну из этих ошибок, а при долгом сбое теряет лидерство и перезапускается.
Сам контроллер здесь почти никогда не виноват. Причина в том, что API-сервер не ответил: в тексте видно context deadline exceeded, Client.Timeout exceeded, TLS handshake timeout или connection refused до адреса API-сервера. Обычно это перегрузка API-сервера, медленный etcd (etcdserver: request timed out) или сетевая проблема на узле с контроллером.
Как проверить
- Совпадают ли по времени такие ошибки у разных контроллеров: если да, проблема в API-сервере.
- Задержки API-сервера и etcd в мониторинге кластера, журналы
kube-apiserverиetcd. - Нагрузка на узлы управляющего уровня: процессор, память, диск под etcd.
Что сделать
- Разбирать производительность API-сервера и etcd: диск etcd должен быть быстрым и не делить ввод-вывод с тяжёлыми задачами.
- Если ошибки у одного контроллера на одном узле, проверить сеть этого узла до API-сервера.
- Единичные записи без перезапусков контроллеров считать фоном.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать