kube-apiserver отвечает медленно, у etcd высокая задержка

Viewed 27

kubectl работает медленно, запросы к API завершаются по таймауту, срабатывают алерты по задержке etcd. Что проверить?

1 Answers
  1. Диски master-узлов. etcd очень чувствителен к скорости диска, поэтому посмотрите iowait на master-узлах и дашборд Control Plane Status в Grafana. Алерты D8EtcdHighRequestsLatency и KubeEtcdHighFsyncDurations указывают именно на диск. Для master-узлов рекомендуются быстрые диски, не менее 400 IOPS.

  2. Кто нагружает 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.

  3. Память apiserver:

    d8 k -n kube-system top po -l component=kube-apiserver
    

    Рост памяти обычно вызван большим числом запросов (пункт 2). Для master-узла рекомендуется не меньше 16 ГБ RAM.

  4. Размер базы etcd. Её увеличивают большие объёмы объектов: события (events), тысячи secrets, в том числе история релизов Helm. Ограничьте историю (--history-max у Helm) и следите за алертом D8KubeEtcdDatabaseSizeCloseToTheLimit.

Подробнее в документации: FAQ модуля control-plane-manager.