Назад | Перейти на главную страницу

Есть ли способ присоединить существующий том (который я только что восстановил из моментального снимка) к PVC?

У меня есть набор mongodb-replicaset, созданный с помощью диаграммы управления. Диаграмма создает PVC на основе предоставленного мной StorageClass. Я аннотирую свои тома тегом, выбранным заданием cron, которое делает снимки томов.

В случае, если мне нужно восстановить из резервных снимков, скажем, в другом кластере, я знаю, что могу создать том из снимка, но я не знаю, как затем превратить этот том в PVC, который ожидает StatefulSet и может перезапустить из.

Я узнал, что StatefulSet будет искать PVC с определенными именами. Я понял это из документации на https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#limitations который говорит:

Хранилище для данного модуля должно быть либо предоставлено PersistentVolume Provisioner на основе запрошенного класса хранилища, либо предварительно предоставлено администратором.

И путем экспериментов я обнаружил, что предварительная подготовка означает просто создание PersistentVolumeClaims с ожидаемыми именами.

Мне удалось восстановить снимок 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. На самом деле восстановить установку таким образом невозможно.