Оптимизация etcd на медленных дисках в Kubernetes
В Kubernetes etcd — это база данных, в которой хранится всё состояние кластера.
Если etcd работает на медленных дисках, начинаются проблемы: kubectl
отвечает дольше, поды остаются в Pending
, а API-сервер «тормозит».
Почему etcd тяжело на медленных дисках
etcd очень зависим от дисковой подсистемы. Каждая запись фиксируется на диск для консистентности.
На HDD или дешёвых облачных дисках с низкими IOPS etcd быстро превращается в узкое место.
Типичные признаки:
- Долгие ответы на
kubectl
- Подов много в
Pending
- Повышенная задержка API
- Директория
/var/lib/etcd
быстро разрастается
Запуск дефрагментации
etcd хранит историю изменений (MVCC). Даже если ключи удаляются, база продолжает расти.
Поэтому используется команда defrag, которая освобождает место.
Пример:
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
defrag
Эту операцию можно запускать регулярно через CronJob или systemd timer.
Лучшие практики для медленных дисков
- Регулярная дефрагментация — предотвращает разрастание БД.
- Ограничение размера — параметр –quota-backend-bytes.
- По возможности перенести etcd на SSD/NVMe.
- Мониторить задержки — метрики (etcd_disk_wal_fsync_duration_seconds).
- Выделенные ресурсы — не запускать etcd рядом с «шумными соседями».
Итог
Работа etcd на медленных дисках рискованна, но с правильной настройкой — дефрагментация, квоты и мониторинг — кластер будет работать стабильнее. Для критичных сред лучше всегда использовать SSD.