Настройка таймаутов etcd
Возможные проблемы
etcd - надежное key-value хранилище для критически важных данных, где Kubernetes API server хранит свое состояние. Значения не считаются записанными, пока кворум узлов не подтвердит запись данных. Кроме того, etcd постоянно проверяет, что в кластере есть лидер и каждый узел знает, какой именно. Обычно кластер etcd запускается на узлах в одном дата-центре, где задержка мала, а таймауты по умолчанию настроены на максимально быстрое сообщение об ошибках. В растянутом кластере, где узлы находятся в разных дата-центрах, RTT значительно выше, и стандартные таймауты могут вызывать ложные срабатывания, как при разделении сети. В этом случае данные остаются согласованными, но etcd перейдет в readonly-режим, чтобы предотвратить split-brain. Если это происходит часто, многие другие компоненты Kubernetes начинают падать с неинформативными сообщениями об ошибках.
Конфигурация
Чтобы избежать частых перевыборов лидера, настройте в конфигурации etcd следующие параметры:
heartbeat-interval- интервал между heartbeatelection-timeout- время ожидания heartbeat перед запуском выборов
Пример аргументов командной строки для etcd:
--election-timeout=10000 --heartbeat-interval=1000
Пример для Talos
Если вы управляете узлами Talos через talm, добавьте параметры в секцию cluster.etcd шаблона:
cluster:
etcd:
extraArgs:
heartbeat-interval: "1000"
election-timeout: "10000"