Где хостил PostgreSQL?

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

Ответ

В DevOps-практике выбор способа хостинга PostgreSQL зависит от требований к контролю, масштабируемости и операционным затратам. Я работал со следующими подходами:

  1. Self-hosted на виртуальных машинах (IaaS): Разворачивал кластеры на AWS EC2 или GCP Compute Engine с использованием инструментов управления конфигурацией (Ansible) для обеспечения отказоустойчивости и репликации. Это давало полный контроль, но требовало больше операционных усилий.
  2. Управляемые сервисы (DBaaS): Часто использовал для продакшена, чтобы снизить операционную нагрузку:
    • AWS RDS for PostgreSQL: Для автоматических бэкапов, патчинга и Multi-AZ развертывания.
    • Google Cloud SQL: Интеграция с GCP IAM и удобное горизонтальное масштабирование чтения.
  3. Внутри Kubernetes: Развертывал через StatefulSets с постоянными томами (PersistentVolumes) для stateful-приложений. Для более продвинутого управления (бэкапы, failover) использовал операторы, например, CloudNativePG или Zalando's Postgres Operator.

Пример манифеста для развертывания PostgreSQL в Kubernetes через StatefulSet (упрощенно):

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres
spec:
  serviceName: postgres
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:15
        env:
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: postgres-secret
              key: password
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: postgres-data
          mountPath: /var/lib/postgresql/data
  volumeClaimTemplates:
  - metadata:
      name: postgres-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

Ключевые критерии выбора: требования к SLA, необходимость кастомизации конфигурации, бюджет и компетенции команды в администрировании БД.