Стадия жизненного цикла модуля: Preview
Резервное копирование на базе снимков диска
Создание снапшотов диска зависит от отдельного модуля snapshot-controller.
Модуль snapshot-controller должен быть включен, и так же настроен один из CSI-драйверов из списка.
Например, sds-local-volume в режиме LVM Thin
Создание Postgres Snapshot
Убедитесь, что выбранный spec.instanse.persistentVolumeClaim.storageClassName поддерживает снапшотинг.
Если storageClassName не был указан явно, убедитесь, что storageClassName по умолчанию в кластере DKP поддерживает эту функцию.
Для создания снимка диска достаточно применить ресурс:
apiVersion: managed-services.deckhouse.io/v1alpha1
kind: PostgresSnapshot
metadata:
name: my-first-snapshot
spec:
postgresName: my-postgres
Результат снимка диска можно увидеть в статусе ресурса
➜ kubectl get postgressnapshot -n postgres-ek my-first-snapshot -oyaml | yq .status
completedAt: "2025-12-04T19:00:31Z"
phase: completed
postgres:
cluster:
replication: Availability
topology: Ignored
configuration:
maxConnections: 300
databases:
- name: test
instance:
cpu:
coreFraction: 50
cores: 1
memory:
size: 1Gi
persistentVolumeClaim:
size: 1Gi
storageClassName: thin-local-storage-class
postgresClassName: default
type: Cluster
startedAt: "2025-12-04T19:00:16Z"
volumeSnapshotName: d8ms-pg-my-first-snapshot
Восстановление из снапшота
Чтобы восстановить Postgres из снимка диска, нужно применить новый ресурс Postgres, указав параметр spec.dataSource
Обратите внимание, что операция практически идентична созданию нового кластера Postgres. То есть при создании такого ресурса будет проведены все валидации для соответствующего PostgresClass.
Это дает преимущество в том, что конфигурация для восстанавливаемого кластера может быть изменена на этом этапе.
Важное условие касается поля databases, так как мы используем декларативное описание логических баз данных, отсутствие имени какой-либо базы данный в списке будет означать,
что после восстановления - в итоговом кластере такая логическая база данных будет отсутствовать, даже если она существует в снапшоте.
То же самое справедливо и для пользователей users.
kubectl apply -f managed-services_v1alpha1_postgres.yaml -n postgres
apiVersion: managed-services.deckhouse.io/v1alpha1
kind: Postgres
metadata:
name: my-restored-postgres
spec:
dataSource:
objectRef:
kind: PostgresSnapshot
name: my-first-snapshot
users:
- name: test-rw
hashedPassword: >-
SCRAM-SHA-256$4096:8LTjDsWOlQ7fnvr0DqRQx0TXMTh6LIyQJow2UnNlsJE=$ZjQi5diDTvn0g7is1ez9qPSGm6SoGezF0FVCZXssDKw=:IEzN8Dz5KcGd1r47thky5XFRhXlIMeoNLNfZtIlGv/8=
role: rw
- name: test-ro
password: '123'
storeCredsToSecret: test-ro-creds
role: ro
databases:
- name: "test"
postgresClassName: default
instance:
memory:
size: 1Gi
cpu:
cores: 1
coreFraction: 50
persistentVolumeClaim:
size: 1Gi
storageClassName: thin-local-storage-class
configuration:
maxConnections: 300
type: Cluster
cluster:
topology: Ignored
replication: Availability
Успех восстановления будет отражен в статусе создаваемого ресурса Postgres
kubectl get postgres my-restored-postgres -n postgres -o wide -w