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

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

Ответ

Для базового деплоя stateless-сервиса в Kubernetes обычно создаются два ключевых объекта: Deployment для управления подами и Service для сетевого доступа.

  1. Deployment — декларативно управляет жизненным циклом подов (репликация, обновления, откаты).

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: app-container
            image: my-registry/app:v1.0
            ports:
            - containerPort: 8080
            envFrom:
            - configMapRef:
                name: app-config
  2. Service — обеспечивает стабильную сетевую точку доступа к группе подов, определяемую селектором.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
      - port: 80
        targetPort: 8080
      type: ClusterIP # Для внутреннего доступа. Для внешнего — LoadBalancer или NodePort.

В зависимости от требований, этот набор дополняется:

  • ConfigMap / Secret — для вынесения конфигурации и чувствительных данных из образа.
  • HorizontalPodAutoscaler (HPA) — для автоматического масштабирования на основе метрик CPU или памяти.
  • Ingress — для маршрутизации внешнего HTTP/HTTPS-трафика в сервисы.
  • PersistentVolumeClaim — если приложению требуется постоянное хранилище.