kubectl работает медленно, запросы к API завершаются по таймауту, срабатывают алерты по задержке etcd. Что проверить?
kubectl работает медленно, запросы к API завершаются по таймауту, срабатывают алерты по задержке etcd. Что проверить?
Диски master-узлов. etcd очень чувствителен к скорости диска, поэтому посмотрите iowait на master-узлах и дашборд Control Plane Status в Grafana. Алерты D8EtcdHighRequestsLatency и KubeEtcdHighFsyncDurations указывают именно на диск. Для master-узлов рекомендуются быстрые диски, не менее 400 IOPS.
Кто нагружает API. Базовая политика аудита записывает все запросы LIST (включена по умолчанию). Найдите самые частые запросы в аудит-логе на master-узле:
jq -r 'select(.verb=="list") | .user.username + " " + (.objectRef.resource // "")' \
/var/log/kube-audit/audit.log | sort | uniq -c | sort -rn | head -20
На практике чаще всего это ArgoCD и другие контроллеры, которые постоянно делают LIST по secrets и большим CRD.
Память apiserver:
d8 k -n kube-system top po -l component=kube-apiserver
Рост памяти обычно вызван большим числом запросов (пункт 2). Для master-узла рекомендуется не меньше 16 ГБ RAM.
Размер базы etcd. Её увеличивают большие объёмы объектов: события (events), тысячи secrets, в том числе история релизов Helm. Ограничьте историю (--history-max у Helm) и следите за алертом D8KubeEtcdDatabaseSizeCloseToTheLimit.
Подробнее в документации: FAQ модуля control-plane-manager.