Что такое etcd и зачем он нужен?
Что такое etcd и зачем он нужен
etcd — это распределённое, отказоустойчивое, сильноконсистентное key-value хранилище, реализующее алгоритм согласования Raft. В Kubernetes etcd является source of truth — там хранится всё критичное состояние кластера: объекты API (Pod, Deployment, Service, ConfigMap, Secret и т.д.), данные контроллеров и метаданные.
Основные свойства и возможности
-
Сильная консистентность (linearizability). Записи в etcd проходят через Raft-лидер; большинство операций читают/записывают согласованное состояние.
-
Raft-кластер и quorum. Для корректной работы нужен кворум (большинство членов). Потеря кворума делает запись невозможной.
-
API с поддержкой транзакций и watch. Есть атомарные сравнения и операции, а также возможность «подписаться» (watch) на изменения ключей — это важно для реактивных контроллеров.
-
Лиз (lease)/TTL. Ключи могут иметь срок жизни; используются, например, для механизма блокировок и лидер-элекции.
-
Снимки (snapshot), WAL, компакция и дефрагментация. Для резервного копирования, восстановления и управления размером базы.
Роль в Kubernetes
-
Хранит desired state и текущие объекты; kube-apiserver читает/записывает данные в etcd.
-
Контроллеры и scheduler ориентируются на данные в etcd при принятии решений.
-
Секреты по умолчанию лежат в etcd, поэтому безопасность этого хранилища критична.
Архитектурные и эксплуатационные моменты
-
HA: рекомендовано разворачивать etcd кластер с нечётным числом членов (3 или 5) для обеспечения устойчивости и производительности.
-
Ресурсы: etcd чувствителен к задержкам сети и дисковой подсистеме — предпочитаются SSD и низкая сетeвая латентность.
-
Безопасность: обязательно TLS для клиентского и peer-трафика; ограничить доступ по сети; использовать аутентификацию/роли в etcd; дополнительно включать шифрование секретов на уровне API-сервера.
-
Бэкапы и восстановление: регулярные snapshot'ы и проверка restore-процедур — обязательны. Потеря/коррупция данных в etcd может сделать кластер неконсистентным или непригодным.
-
Мониторинг: метрики (latency, leader changes, db size, compaction) и оповещения по проблемам quorum, длительным GC/compaction и росту базы.
Ограничения и рекомендации по использованию
-
Не храните большие бинарные объёмы и не используйте etcd как «файловое хранилище» — он предназначен для маленьких структурированных ключ-значение.
-
Планируйте размер данных, периодическую компактацию и дефрагментацию.
-
Тестируйте восстановление из бэкапов и процедуру при потере кворума.
-
В production часто выделяют отдельные узлы или диски для etcd; в управляемых сервисах control plane/etcd может быть управляем провайдером.
Примеры операций (концептуально)
-
Снятие snapshot: etcdctl snapshot save snapshot.db
-
Восстановление из snapshot: etcdctl snapshot restore snapshot.db
-
Просмотр членов кластера: etcdctl member list
(на практике требуется указать endpoints, TLS-сертификаты и переменную ETCDCTL_API=3).
etcd — критическая часть Kubernetes: он отвечает за целостность и согласованность всех конфигураций и состояния. Неправильная эксплуатация, отсутствие шифрования или резервных копий могут привести к серьёзным проблемам с кластером.