Можно ли разместить базу данных и микросервис в одном Pod в Kubernetes?

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

Ответ

Технически — да, но это считается антипаттерном по следующим причинам:

Проблемы такого подхода:

  1. Нарушение принципа единой ответственности (Single Responsibility). Контейнер в Pod должен выполнять одну основную задачу.
  2. Связанное масштабирование. Невозможно независимо масштабировать приложение и базу данных.
  3. Общий жизненный цикл. Сбой или перезапуск одного контейнера приводит к перезапуску всего Pod, что для БД чревато потерей данных или повреждением.
  4. Усложнение управления ресурсами. Трудно корректно выделить и ограничить CPU/RAM для двух разных по типу нагрузки сервисов.

Пример (не рекомендуется):

apiVersion: v1
kind: Pod
metadata:
  name: anti-pattern-pod
spec:
  containers:
  - name: app-container
    image: my-app:latest
  - name: db-container
    image: postgres:15

Правильная архитектура:

  • База данных: StatefulSet с привязанным PersistentVolumeClaim (PVC) для сохранения данных.
  • Микросервис: Deployment для stateless-приложения.
  • Связь: Сервисы общаются через Service (ClusterIP для БД). Это обеспечивает независимость, отказоустойчивость и правильное управление состоянием.