Как задеплоить приложение в Kubernetes?

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

Ответ

Стандартный процесс деплоя приложения в Kubernetes включает создание образов и применение манифестов. Вот как я это делаю:

  1. Сборка и публикация образа: Сначала приложение упаковывается в Docker-образ и отправляется в registry (например, Docker Hub, GitLab Container Registry, ECR).

    docker build -t myregistry.com/myapp:v1.0 .
    docker push myregistry.com/myapp:v1.0
  2. Создание основных манифестов: Основные ресурсы — это Deployment (управление подами) и Service (доступ к ним).

    deployment.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: myregistry.com/myapp:v1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                memory: "64Mi"
                cpu: "250m"
              limits:
                memory: "128Mi"
                cpu: "500m"
            livenessProbe:
              httpGet:
                path: /health
                port: 8080

    service.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-service
    spec:
      selector:
        app: myapp
      ports:
      - port: 80
        targetPort: 8080
      type: ClusterIP # Или LoadBalancer/NodePort для внешнего доступа
  3. Применение конфигурации:

    kubectl apply -f deployment.yaml -f service.yaml
  4. Проверка:

    kubectl get pods,svc,deploy
    kubectl logs -f deployment/myapp-deployment

Для production-среды я всегда добавляю:

  • ConfigMaps/Secrets для конфигурации.
  • Horizontal Pod Autoscaler (HPA) для автоматического масштабирования.
  • Ingress для маршрутизации HTTP/HTTPS трафика.
  • Использую Helm или Kustomize для управления сложными конфигурациями и разными окружениями (dev/staging/prod).