Ответ
Kubernetes (K8s) — это платформа с открытым исходным кодом для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Она позволяет управлять кластером серверов как единым целым.
Основные задачи, решаемые Kubernetes:
- Оркестрация контейнеров: Автоматическое размещение контейнеров на узлах кластера на основе доступных ресурсов.
- Самовосстановление: Перезапуск упавших контейнеров, замена и перераспределение подов при сбое узла.
- Масштабирование: Горизонтальное масштабирование (увеличение/уменьшение количества реплик) вручную или автоматически (HPA - Horizontal Pod Autoscaler).
- Автоматизация развертываний и откатов: Позволяет применять обновления к приложениям без простоя (rolling updates) и легко откатываться к предыдущей версии.
- Балансировка нагрузки и обнаружение сервисов: Предоставляет подам собственные IP-адреса и единое DNS-имя для группы подов, а также распределяет нагрузку между ними.
Манифест Deployment — это YAML-файл, который декларативно описывает желаемое состояние для группы идентичных подов. Kubernetes постоянно работает над тем, чтобы текущее состояние соответствовало описанному в манифесте.
Пример манифеста Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment # Имя самого Deployment
spec:
replicas: 3 # Желаемое количество работающих подов
selector:
matchLabels:
app: my-app # Указывает, какими подами управляет этот Deployment
template: # Шаблон для создания подов
metadata:
labels:
app: my-app # Метка, которая будет присвоена подам
spec:
containers:
- name: my-app-container
image: my-registry/my-app:1.0.0 # Образ контейнера
ports:
- containerPort: 80
resources:
requests: # Минимально запрашиваемые ресурсы
cpu: "100m"
memory: "128Mi"
limits: # Максимальные ресурсы, которые может использовать контейнер
cpu: "200m"
memory: "256Mi"