Что такое etcd и для чего он используется в DevOps?

«Что такое etcd и для чего он используется в DevOps?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

etcd — это высокодоступное распределённое хранилище типа «ключ-значение», спроектированное для хранения критически важных данных, которые должны быть всегда доступны. Его основная роль в DevOps-экосистеме — быть надёжным источником конфигурации и координатором для распределённых систем.

Ключевые особенности и применение:

  1. Хранилище конфигурации: Централизованное хранение настроек для микросервисов (строки подключения к БД, флаги функций, параметры маршрутизации).
  2. Сервис-дискавери: Сервисы могут регистрировать себя в etcd, а другие — находить их конечные точки (endpoints).
  3. Координация распределённых систем: Используется для реализации распределённых блокировок, выбора лидера (leader election) и организации очередей заданий.
  4. Бэкенд для 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, сильные гарантии консистентности (линейная запись), отказоустойчивость и отличную производительность для задач чтения, что идеально подходит для сценариев управления состоянием и конфигурацией.