Из каких основных компонентов состоит архитектура Kubernetes?

«Из каких основных компонентов состоит архитектура Kubernetes?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Kubernetes — это распределенная система оркестрации контейнеров, состоящая из двух основных групп компонентов: Control Plane (Плоскость управления) и Worker Nodes (Рабочие узлы).

Control Plane (Мастер-узел/ы)

Управляет всем кластером. Компоненты могут работать на одном или распределенных узлах.

  1. kube-apiserver:

    • Фронтенд Control Plane. Единственный компонент, с которым взаимодействуют все остальные (CLI, UI, узлы).
    • Предоставляет REST API для управления кластером (создание, обновление, удаление ресурсов).
  2. etcd:

    • Распределенное key-value хранилище. Сохраняет всю конфигурацию и состояние кластера (желаемое и текущее).
    • Единственный компонент с состоянием (stateful) в Control Plane.
  3. kube-scheduler:

    • Отвечает за распределение подов (Pods) по рабочим узлам.
    • Учитывает требования ресурсов (CPU/RAM), политики affinity/anti-affinity, ограничения и т.д.
  4. kube-controller-manager:

    • Запускает контроллеры — фоновые циклы, которые следят за состоянием кластера и приводят его к желаемому.
    • Примеры контроллеров: Node Controller, Replication Controller, Endpoints Controller, Service Account Controller.

Worker Nodes (Рабочие узлы)

Запускают рабочие нагрузки (контейнеры).

  1. kubelet:

    • Агент на каждом узле. Отвечает за запуск, остановку и поддержание состояния подов в соответствии с PodSpec, полученными от API-сервера.
    • Сообщает о состоянии узла и подов обратно в Control Plane.
  2. kube-proxy:

    • Сетевой прокси на каждом узле. Реализует концепцию Service (сервиса).
    • Поддерживает сетевые правила, которые обеспечивают коммуникацию с подами как внутри узла, так и снаружи.
  3. Container Runtime:

    • Программное обеспечение, которое непосредственно запускает контейнеры (например, containerd, CRI-O, Docker Engine).
    • Kubernetes взаимодействует с ним через Container Runtime Interface (CRI).

Основные абстракции (Ресурсы)

  • Pod: Наименьшая и простейшая единица развертывания. Группа из одного или нескольких контейнеров с общими сетевыми и storage-ресурсами.
  • Service: Абстракция, определяющая логический набор подов и политику доступа к ним (стабильный IP/DNS имя).
  • Ingress: Управляет внешним HTTP/HTTPS доступом к сервисам внутри кластера (роутинг, SSL).

Пример минимального манифеста Pod:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-example
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80