Какой минимальный набор манифестов нужен, чтобы запустить приложение в Kubernetes?

«Какой минимальный набор манифестов нужен, чтобы запустить приложение в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Минимальный набор для запуска stateless-приложения обычно включает два основных объекта Kubernetes:

  1. Deployment: Управляет жизненным циклом подов (создание, обновление, масштабирование). Он гарантирует, что всегда работает заданное количество идентичных реплик.
  2. Service: Обеспечивает стабильную сетевую конечную точку для доступа к группе подов, управляемых Deployment. Сервис выполняет балансировку нагрузки между ними.

Минимальные манифесты:

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: app-container
        image: myregistry/my-app:v1.0.0
        ports:
        - containerPort: 8080
        env:
        - name: ENV_VAR
          value: "production"

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
  - port: 80        # Порт, на котором сервис доступен внутри кластера
    targetPort: 8080 # Порт контейнера
  type: ClusterIP   # Тип по умолчанию, доступен только внутри кластера

Для доступа извне кластера потребуется дополнительный объект Ingress (вместе с Ingress Controller, например, nginx-ingress) или изменение типа сервиса на LoadBalancer/NodePort. Для production также почти всегда используются ConfigMap для конфигурации и Secret для чувствительных данных.