Как вы использовали Kubernetes в проекте?

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

Ответ

Kubernetes использовался как платформа для оркестрации контейнеризированных микросервисов, обеспечивая развертывание, масштабирование и управление.

Ключевые объекты и их применение:

  1. Deployment: Определяет желаемое состояние для подов (реплики, образ). Обеспечивает rolling updates и rollback.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: api-service
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: api-service
      template: # Шаблон пода
        metadata:
          labels:
            app: api-service
        spec:
          containers:
          - name: api
            image: my-registry/api-service:v1.2.0
            ports:
            - containerPort: 8080
            envFrom:
            - configMapRef:
                name: api-config # Конфигурация из ConfigMap
  2. Service: Абстракция для доступа к группе подов (обычно по селектору app: api-service). Создает стабильный DNS-имя и балансировку нагрузки.

    apiVersion: v1
    kind: Service
    metadata:
      name: api-service
    spec:
      selector:
        app: api-service
      ports:
        - protocol: TCP
          port: 80          # Порт сервиса
          targetPort: 8080  # Порт контейнера
      type: ClusterIP
  3. Ingress: Управляет внешним HTTP/HTTPS доступом к сервисам, маршрутизируя трафик на основе хоста или пути.

Практические преимущества:

  • Self-healing: Kubernetes автоматически перезапускает упавшие контейнеры и заменяет неисправные ноды.
  • Горизонтальное масштабирование: kubectl scale deployment api-service --replicas=5.
  • Управление конфиденциальными данными: Использование Secrets для хранения паролей и токенов.
  • Хранение данных: Использование PersistentVolumes и PersistentVolumeClaims для stateful-приложений.