Ответ
etcd — это высокодоступное распределённое хранилище типа «ключ-значение», спроектированное для хранения критически важных данных, которые должны быть всегда доступны. Его основная роль в DevOps-экосистеме — быть надёжным источником конфигурации и координатором для распределённых систем.
Ключевые особенности и применение:
- Хранилище конфигурации: Централизованное хранение настроек для микросервисов (строки подключения к БД, флаги функций, параметры маршрутизации).
- Сервис-дискавери: Сервисы могут регистрировать себя в etcd, а другие — находить их конечные точки (endpoints).
- Координация распределённых систем: Используется для реализации распределённых блокировок, выбора лидера (leader election) и организации очередей заданий.
- Бэкенд для Kubernetes: Это самый известный кейс. etcd хранит всё состояние кластера Kubernetes: описания подов, сервисов, конфигураций, секретов.
Технические основы:
- Протокол: gRPC (высокопроизводительный RPC от Google).
- Консенсус: Использует алгоритм Raft для обеспечения согласованности данных между всеми узлами в кластере.
- Модель данных: Иерархическое ключевое пространство с поддержкой наблюдения (watch) за изменениями.
Пример работы через etcdctl (CLI-клиент):
# Записать конфигурацию
etcdctl put /app/config/database/host "db-primary.prod.svc"
# Прочитать конфигурацию
etcdctl get /app/config/database/host
# Наблюдать за изменениями ключа (watch)
etcdctl watch /app/config/database/host
Почему он популярен в DevOps? Он предлагает простой API, сильные гарантии консистентности (линейная запись), отказоустойчивость и отличную производительность для задач чтения, что идеально подходит для сценариев управления состоянием и конфигурацией.