Опиши архитектуру кластера Kubernetes.

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

Ответ

Кластер Kubernetes — это набор узлов (нод), объединённых в единую систему для оркестрации контейнеризированных приложений. Архитектура делится на две основные части: Control Plane (плоскость управления) и Worker Nodes (рабочие узлы).

1. Control Plane (Master-узлы): Управляет всем кластером. Обычно разворачивается на нескольких нодах для отказоустойчивости.

  • kube-apiserver: Фронтенд плоскости управления. Все запросы на управление (kubectl, UI, другие компоненты) проходят через него. Он валидирует и обрабатывает запросы, сохраняя состояние в etcd.
  • etcd: Высокодоступное key-value хранилище, в котором хранится вся конфигурация и состояние кластера.
  • kube-scheduler: Отвечает за распределение подов (Pods) по рабочим узлам. Анализирует ресурсы узлов (CPU, память) и ограничения подов, выбирая оптимальный узел для запуска.
  • kube-controller-manager: Запускает контроллеры — фоновые процессы, которые следят за состоянием кластера. Например:
    • Node Controller: реагирует на недоступность узлов.
    • Replication Controller: поддерживает заданное количество реплик подов.
    • Endpoints Controller: наполняет объекты Endpoints (связывает Pods и Services).

2. Worker Nodes: Запускают рабочие нагрузки (поды).

  • kubelet: Агент на каждом узле. Получает спецификации подов от API-сервера и обеспечивает, чтобы описанные в них контейнеры были запущены и работоспособны.
  • kube-proxy: Сетевой прокси, реализующий концепцию Service. Поддерживает сетевые правила на узле, позволяющие сетевое взаимодействие с подами как внутри кластера, так и извне.
  • Container Runtime: Программное обеспечение для запуска контейнеров (например, containerd, CRI-O). Kubelet взаимодействует с ним через CRI (Container Runtime Interface).

Пример простого манифеста для запуска пода:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx-container
    image: nginx:1.21
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
    - containerPort: 80

Дополнения (Addons): Для полноценной работы кластера добавляются системные компоненты: DNS-сервис (CoreDNS), сетевые плагины (Calico, Flannel), Ingress-контроллеры (nginx-ingress), Dashboard и другие.