Ответ
Kubernetes (сокращенно k8s) — это опенсорсная платформа для оркестрации контейнеризированных приложений, которая автоматизирует их развертывание, масштабирование и управление. Она позволяет управлять сложными системами декларативно, описывая желаемое состояние в YAML или JSON файлах.
Ключевые концепции и архитектура:
- Cluster: Группа машин (нод), на которых запускаются приложения.
- Control Plane (Master Node): «Мозг» кластера, который управляет его состоянием. Принимает команды и распределяет работу по рабочим нодам.
- Worker Node: Машина (физическая или виртуальная), которая выполняет работу, запуская контейнеры.
Основные объекты (компоненты):
- Pod: Минимальная единица развертывания в Kubernetes. Это абстракция над контейнером, которая может содержать один или несколько тесно связанных контейнеров.
- Deployment: Декларативное описание для управления Pod'ами и ReplicaSet'ами. Отвечает за запуск нужного количества копий приложения, а также за его обновление (например, Rolling Update) и откат.
- Service: Абстракция, которая определяет логический набор Pod'ов и политику доступа к ним. Обеспечивает стабильную сетевую точку входа для группы Pod'ов (например, для балансировки нагрузки).
# Пример манифеста для Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3 # Желаемое состояние: 3 копии приложения
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Основные преимущества:
- Горизонтальное масштабирование: Легко изменять количество запущенных копий приложения.
- Самовосстановление: Автоматически перезапускает упавшие контейнеры и перераспределяет их по рабочим нодам.
- Автоматизация развертываний и откатов: Позволяет безопасно обновлять приложения без простоя.
- Переносимость: Работает в различных облачных средах (AWS, GCP, Azure) и на собственных серверах (on-premise).