У меня есть набор mongodb-replicaset, созданный с помощью диаграммы управления. Диаграмма создает PVC на основе предоставленного мной StorageClass. Я аннотирую свои тома тегом, выбранным заданием cron, которое делает снимки томов.
В случае, если мне нужно восстановить из резервных снимков, скажем, в другом кластере, я знаю, что могу создать том из снимка, но я не знаю, как затем превратить этот том в PVC, который ожидает StatefulSet и может перезапустить из.
Я узнал, что StatefulSet
будет искать PVC с определенными именами. Я понял это из документации на https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#limitations который говорит:
Хранилище для данного модуля должно быть либо предоставлено PersistentVolume Provisioner на основе запрошенного класса хранилища, либо предварительно предоставлено администратором.
И путем экспериментов я обнаружил, что предварительная подготовка означает просто создание PersistentVolumeClaim
s с ожидаемыми именами.
Мне удалось восстановить снимок EBS на том, создать PersistentVolume
напрямую ссылаясь на идентификатор восстановленного тома, затем создайте PersistentVolumeClaim
с правильным именем. Так, например, эта установка mongo ожидает тома с именем datadir-pii-mongodb-replicaset-[0-2]
и после восстановления снимка EBS на том я использую следующий yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
labels:
failure-domain.beta.kubernetes.io/region: us-west-2
failure-domain.beta.kubernetes.io/zone: us-west-2a
name: pv-a
namespace: larksettings-pii
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 320Gi
awsElasticBlockStore:
fsType: xfs
volumeID: aws://us-west-2a/vol-xxxxxxxxxxxxx
storageClassName: mongo-xfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: mongodb-replicaset
release: pii
name: datadir-pii-mongodb-replicaset-0
namespace: larksettings-pii
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 320Gi
storageClassName: mongo-xfs
volumeName: pv-a
Будьте осторожны с зонами доступности. Поскольку я охватил 3 зоны, мне нужно было восстановить три снимка в отдельные зоны и убедиться, что PersistentVolume
spec отражает это.
Когда вы используете StatefulSet (или ReplicaSet), он создает тома динамически, поскольку StatufulSet использует шаблон PVC и создает несколько томов на основе этого шаблона. Таким образом, вы не можете указать, какой объем будет востребован PVC. В его случае можно создать PV на основе снимка, но он может претендовать только на снимки. Например, снимок реплики 1 можно смонтировать на реплику 3. На самом деле восстановить установку таким образом невозможно.