Ответ
Etcd — это распределенное, отказоустойчивое key-value хранилище, выступающее в роли единственного источника истины (single source of truth) для кластера Kubernetes. В нем хранится вся конфигурация и состояние кластера.
Что именно хранится в etcd:
- Конфигурация объектов: Nodes, Pods, ConfigMaps, Secrets, Deployments, Services.
- Состояние: Текущие желаемые и актуальные состояния всех ресурсов.
- Информация о кластере: Настройки сети (например, подсети для CNI), информация о
kube-schedulerиkube-controller-manager.
Архитектура и важность для DevOps:
- Консенсус и отказоустойчивость: Etcd использует алгоритм консенсуса Raft. Для устойчивости к сбоям требуется кластер из нечетного количества нод (обычно 3 или 5). Потеря кворума нод (например, 2 из 3) делает кластер Kubernetes неработоспособным для внесения изменений.
- Критический компонент: Без работающего etcd
kube-apiserverне может получить или изменить состояние кластера. Работающие Pods продолжат работать, но управлять ими (масштабировать, обновлять) будет невозможно. - Бэкап и восстановление: Регулярный бэкап etcd — обязательная практика для аварийного восстановления (Disaster Recovery).
# Пример создания снапшота etcd с помощью etcdctl ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /var/backup/etcd-snapshot-$(date +%Y%m%d).db - Безопасность: В продакшене etcd должен быть защищен TLS-сертификатами для клиентской и пир-коммуникации (порты 2379 и 2380 соответственно).
Проверка состояния:
# Проверка здоровья кластера etcd
ETCDCTL_API=3 etcdctl endpoint health
# Получение списка ключей (например, всех Pods в namespace default)
ETCDCTL_API=3 etcdctl get /registry/pods/default --prefix