Каковы основные задачи Kubernetes и что описывает манифест Deployment

Ответ

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"