Невозможно восстановить PVC постоянных дисков GCP в другой регион при резервном копировании кластера GKE с помощью Velero с помощью подключаемого модуля CSI

Я пытаюсь использовать Velero в качестве инструмента резервного копирования и аварийного восстановления в Google Cloud Platform с несколькими регионами GCP (например, europe-north1 и europe-west4) для частных кластеров GKE. Я смог успешно выполнить резервное копирование и восстановление с помощью velero в том же регионе (взяв резервную копию кластера gke в европе-север1 и восстановив в другой кластер gke в европе-север1) без каких-либо проблем. Это отлично работает, потому что снимки хранятся в одном регионе (europe-north1) для обоих кластеров.

Но я хотел бы использовать Velero в качестве инструмента аварийного восстановления для кластеров GKE, чтобы я мог сделать резервную копию кластеров GKE в регионе европа-север1 и восстановить их в регионе европа-запад4. При дальнейшем исследовании я обнаружил, что, включив поддержку плагина CSI для velero, я смогу добиться того же. Итак, я следовал инструкциям по использованию плагина CSI с velero, но я все еще не могу восстановить постоянные PVC диска в другом регионе. Снимки делаются для нескольких регионов (например, для ЕС). Но когда я запускаю команду velero restore, создание модуля (я использую модули wordpress и mysql в качестве примеров) находилось в состоянии ожидания.

kubectl describe pod (mysql и wordpress) выдает следующую ошибку:

   Normal   NotTriggerScaleUp  72s (x31 over 6m12s)  cluster-autoscaler  pod didn't trigger scale-up (it wouldn't fit if a new node is added):
  Warning  FailedScheduling   60s (x11 over 6m14s)  default-scheduler   0/4 nodes are available: 4 node(s) had volume node affinity conflict.

Эта ошибка возникает из-за того, что постоянные диски Google, созданные PVC, находятся в другом регионе, чем кластер GKE. Проверяя диски, я вижу, что команда восстановления создала два диска, но они по-прежнему созданы в регионе europe-north1 (первичный кластерный регион gke), а не в регионе europe-west4, где находится вторичный кластер gke.

Поскольку это новая функция для velero (подключаемый модуль CSI), мне не удалось найти никакой документации по ее использованию в GCP (есть документ, показывающий реализацию CSI с дисками Azure).

Минимальные требования для CSI Plugin для работы с резервными копиями Velero:

kubernetes version : 1.17
velero version: 1.4.2

Версия Velero

velero version
Client:
        Version: v1.4.2
        Git commit: 56a08a4d695d893f0863f697c2f926e27d70c0c5
Server:
        Version: v1.4.2

Версия GKE Cluster kubernetes (кластер GKE, созданный с помощью надстройки GcePersistentDiskCsiDriver=ENABLED):

v1.17.9-gke.600 

Первичный регион:

europe-north1

Вторичный (DR) регион:

europe-west4

Команда, используемая для установки сервера velero (с включенным плагином CSI):

velero install \ 
--features=EnableCSI \ 
--provider=gcp \ 
--image=gcr.io/$project/velero:v1.4.2  \ 
--plugins=gcr.io/$project/velero-plugin-for-gcp:v1.1.0,gcr.io/$project/velero-plugin-for-csi:v0.1.0 \ 
--bucket=$storagebucket \ 
--secret-file=$HOME/./velero-backup-storage-sa-key.json

Другие документы, на которые я ссылался по этому поводу:

https://velero.io/docs/v1.4/csi/

https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/gce-pd-csi-driver

Любая помощь приветствуется.

1 ответ

В GCP VolumeSnapshots по умолчанию являются мультирегиональными (но с одним географическим регионом - США, Европа или Азия). Я успешно протестировал межрегиональное восстановление для StatefulSet от us-central1 до us-east4 в GCP. Но одно предостережение заключается в том, что я использовал региональные диски и создал классы StorageClasses для региона / зоны сallowedTopologiesнастроен. Вот мой СЦ восстановления:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  name: regional-pd-ssd-csi-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
  replication-type: regional-pd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - us-east4-b
    - us-east4-c

А вот и СЦ для резервного региона:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  name: regional-pd-ssd-csi-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
  #replication-type is one of none or regional-pd, defaults to none (zonal PD)
  replication-type: regional-pd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - us-central1-a
    - us-central1-b

Возможно, можно будет использовать allowedTopologies без региональных дисков, но эти параметры не поддерживаются драйвером EBS CSI (насколько мне известно).

Другие вопросы по тегам