Что такое Deployment в OpenShift?

«Что такое Deployment в OpenShift?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Deployment в OpenShift — это объект, управляющий жизненным циклом экземпляров приложения (подов) в контейнерах. Он обеспечивает декларативное обновление и масштабирование.

Ключевые объекты и стратегии:

  • DeploymentConfig (устаревший, специфичный для OpenShift): Имеет встроенные триггеры (ImageChange, ConfigChange) и стратегии развертывания (Rolling, Recreate).
  • Deployment (Kubernetes-стандарт): Рекомендуемый подход. Управляется через ReplicaSet. Более портабелен.
  • Стратегии обновления:
    • Rolling Update: Постепенная замена подов (по умолчанию). Гарантирует отсутствие простоя.
    • Recreate: Все старые поды удаляются перед созданием новых. Приводит к простою.

Пример Deployment (Kubernetes-стиль):

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: registry.example.com/my-app:v1.0
        ports:
        - containerPort: 8080

Почему это важно: Deployment абстрагирует ручное управление подами, автоматизируя развертывание, откат (kubectl rollout undo) и масштабирование, что является основой CI/CD в OpenShift.