Невозможно восстановить 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 (насколько мне известно).