Ответ
Kubernetes оперирует объектами (ресурсами), которые описывают состояние кластера. Основные из них:
1. Pod
Минимальная и неделимая единица развертывания. Контейнер (или несколько тесно связанных контейнеров), которые разделяют:
- Сетевое пространство (один IP-адрес).
- Тома хранения данных (Volumes).
2. Deployment
Декларативный объект для управления Pod'ами. Обеспечивает:
- Обновление версий (rolling update).
- Откат на предыдущую версию (rollback).
- Масштабирование количества реплик Pod'ов.
3. Service
Абстракция для доступа к набору Pod'ов. Определяет стабильную конечную точку (IP и DNS-имя). Типы:
- ClusterIP — внутренний IP (доступ только внутри кластера).
- NodePort — открывает порт на каждой ноде кластера.
- LoadBalancer — создает внешний балансировщик нагрузки (в облачных провайдерах).
4. ConfigMap & Secret
ConfigMap— хранит конфигурационные данные в виде пар «ключ-значение» (например, настройки приложения).Secret— аналогичен ConfigMap, но предназначен для хранения чувствительных данных (пароли, токены) в закодированном виде (base64).
5. Volume & PersistentVolume (PV) / PersistentVolumeClaim (PVC)
Volume— механизм хранения данных, живущий пока жив Pod.PersistentVolume (PV)— ресурс хранения в кластере (например, диск в облаке).PersistentVolumeClaim (PVC)— запрос пользователя на выделение PV определенного размера и типа.
6. Namespace
Виртуальный кластер внутри физического. Позволяет делить ресурсы кластера между командами или окружениями (dev, staging, prod).
7. Ingress
Управляет внешним HTTP/HTTPS доступом к сервисам внутри кластера. Обеспечивает маршрутизацию на основе хоста или пути.
Пример манифеста Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3 # Количество идентичных Pod'ов
selector:
matchLabels:
app: nginx # Выбирает Pod'ы с этим лейблом
template: # Шаблон для создания Pod'ов
metadata:
labels:
app: nginx # Лейбл для этого Pod'а
spec:
containers:
- name: nginx
image: nginx:1.21-alpine
ports:
- containerPort: 80