Что произойдет с подами, если отвалится etcd в Kubernetes

«Что произойдет с подами, если отвалится etcd в Kubernetes» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Etcd — это распределенное key-value хранилище, которое служит единственным источником истины для всего состояния кластера Kubernetes (метаданные Pod'ов, Services, ConfigMaps, Secrets и т.д.).

Если etcd кластер полностью теряет кворум (например, падает большинство нод):

  1. API-сервер Kubernetes становится недоступен. Команды kubectl (get, create, delete) будут завершаться с ошибками типа "connection refused" или "the server is currently unable to handle the request".
  2. Управляющие плоскости (control plane) парализуются:
    • kube-controller-manager и kube-scheduler перестанут работать, так как не могут общаться с API-сервером.
    • Это означает, что новые Pod'ы не смогут создаваться, Deployment'ы не смогут масштабироваться или обновляться, отказавшие Pod'ы не будут пересозданы.
  3. Существующие рабочие нагрузки (Pods, Services):
    • Поды на рабочих нодах (worker nodes) продолжат работать. Kubelet на каждой ноде управляет жизненным циклом своих Pod'ов независимо.
    • Сетевая связность между Pod'ами (через CNI, например, Calico или Cilium) и работа Service'ов (через kube-proxy или CNI) также продолжат работать, так как их конфигурация уже применена на нодах.
    • CoreDNS/kube-dNS будут отвечать на запросы, основанные на последнем известном состоянии Service'ов.

Кратко: кластер переходит в "замороженное" состояние. Существующие приложения работают, но любое изменение или самовосстановление становится невозможным.

Восстановление и отказоустойчивость (DevOps perspective):

  • Кворум: Продакшен-кластеры должны иметь не менее 3 нод etcd (лучше нечетное число: 3, 5) для отказоустойчивости. Кластер может пережить отказ (N-1)/2 нод.
  • Регулярные бэкапы: Критически важно настроить автоматическое создание и проверку снапшотов etcd (например, с помощью etcdctl snapshot save). Восстановление кластера из бэкапа — стандартная процедура на случай катастрофы.
  • Мониторинг: Необходимо мониторить здоровье etcd-нод (доступность, лидерство, задержки записи) через Prometheus.
  • Управляемые сервисы: Использование managed-Kubernetes (GKE, EKS, AKS) снимает с команды операционную нагрузку по поддержанию etcd, так как провайдер обеспечивает его отказоустойчивость и бэкапы.