Ответ
В контексте DevOps я работал с базами данных на нескольких уровнях:
- Администрирование и обеспечение доступности: Развертывание, настройка высокой доступности (репликация, кластеризация), мониторинг (например, с помощью Prometheus exporters) и организация бэкапов.
- Инфраструктура как код: Провиженинг инстансов БД (например, AWS RDS, Google Cloud SQL) с помощью Terraform и управление их конфигурацией.
- Миграции и управление схемой: Интеграция инструментов миграции (Liquibase, Flyway) в CI/CD-пайплайны для безопасного и автоматизированного обновления схемы БД.
Пример: Настройка автоматических бэкапов для PostgreSQL кластера в Kubernetes с помощью CronJob и отправкой в S3:
# CronJob для бэкапа
apiVersion: batch/v1
kind: CronJob
metadata:
name: postgres-backup
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: postgres:13
command:
- /bin/sh
- -c
- |
pg_dump -h $PG_HOST -U $PG_USER $PG_DB | gzip > /backup/dump.sql.gz
aws s3 cp /backup/dump.sql.gz s3://my-backup-bucket/
env:
- name: PG_HOST
value: "postgres-primary"
- name: PG_USER
valueFrom:
secretKeyRef:
name: postgres-secret
key: username
- name: PG_DB
value: "myapp"
restartPolicy: OnFailure