Основные объекты Kubernetes и работа с kubectl

Мы уже освоили работу с виртуальными машинами и сетями в облаке, научились упаковывать приложения в Docker-контейнеры и автоматизировать их сборку. Однако в реальных проектах запуск одиночных контейнеров — это лишь начало. Когда приложений десятки, а нагрузка постоянно меняется, управлять ими вручную невозможно.

Для автоматизации этих процессов используют Kubernetes (K8s) — платформу для оркестрации контейнеров.

Декларативный подход и роль kube-apiserver

В Docker мы часто использовали императивные команды: «запусти контейнер», «останови сервис». Kubernetes работает иначе — на основе декларативного подхода. Вы не отдаете приказы, а описываете желаемое состояние системы в манифесте (YAML-файле). Kubernetes сам подбирает действия, чтобы реальность соответствовала вашему описанию.

Центральный узел кластера — kube-apiserver. Это точка входа для всех запросов. Взаимодействие строится по цепочке:

  1. Вы используете утилиту kubectl.
  2. Она отправляет запрос в kube-apiserver.
  3. Сервер проверяет права, сохраняет настройки и дает команды компонентам кластера.

Процесс взаимодействия показан на Схеме 1.

Основные объекты: от контейнера до сети

В Kubernetes всё представлено в виде объектов. Чтобы управлять инфраструктурой, нужно понимать четыре базовых элемента.

Под (Pod)

Минимальная единица в иерархии. Под — это оболочка для одного или нескольких контейнеров.

  • Контейнеры внутри одного пода делят общую сеть (IP) и дисковые тома.
  • Правило: один под — один основной процесс. Не пытайтесь упаковать всю архитектуру в один под.

Деплоймент (Deployment)

Инженеры редко создают поды вручную. Обычно используют деплоймент — контроллер, который следит за состоянием приложения.

  • Самовосстановление: если под «упадет», деплоймент автоматически создаст новый.
  • Обновления: позволяет обновлять версию приложения без простоя (Rolling Update).
  • Масштабирование: одной командой меняет количество копий приложения.

Сервис (Service)

Поды эфемерны: они могут перезапускаться, при этом их внутренние IP-адреса меняются. Чтобы другие части системы всегда могли «найти» приложение, нужен сервис. Он предоставляет единый, неизменный адрес для группы подов.

Неймспейс (Namespace)

Это виртуальные перегородки внутри кластера. Неймспейс позволяет изолировать ресурсы разных команд или окружений (например, prod и stage), чтобы они не мешали друг другу.

Структура вложенности объектов показана в Иерархии 1.

Работа с kubectl: инспекция и управление

Инструмент kubectl — ваш главный интерфейс для управления кластером.

ЗадачаКоманда
Посмотреть список всех подовkubectl get pods
Увидеть подробную информацию об объектеkubectl describe pod <name>
Применить изменения из файлаkubectl apply -f manifest.yaml
Посмотреть логи приложенияkubectl logs <pod_name>
Удалить объектkubectl delete deployment <name>

Пример манифеста для запуска веб-сервера. Секция spec определяет, как именно должно работать приложение.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: dev
spec:
  replicas: 3 # Запустить 3 копии приложения
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-container
        image: cr.yandex/mirror/nginx:latest # Зеркало для стабильной загрузки
        ports:
        - containerPort: 80

Проверьте себя:

  1. С помощью каких команд kubectl можно найти проблемный под, изучить последние 20 строк его логов и узнать, на каком физическом сервере (ноде) он запущен?
  2. Какой объект обеспечивает стабильный сетевой адрес для группы динамических подов?

Мы разобрали теорию и базовые инструменты. В следующей теме перейдем к практике: установим локальный кластер (Minikube или K3s) и научимся развертывать приложения, проверяя механизмы самовосстановления Kubernetes в деле.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram