kubernetes - 使用 CSI 插件使用 Velero 备份 GKE 集群时,无法将 GCP 永久磁盘 PVC 恢复到另一个区域

标签 kubernetes google-cloud-platform backup google-kubernetes-engine velero

我正在尝试在具有多个 GCP 区域(例如: europe-north1 和 europe-west4)的 Google Cloud Platform 中使用 Velero 作为 GKE 私有(private)集群的备份和灾难恢复工具。我能够在同一区域使用 velero 成功备份和恢复(备份 europe-north1 中的 gke 集群并恢复到 europe-north1 中的另一个 gke 集群),没有任何问题。这很好用,因为两个集群的快照都存储在同一个区域 (europe-north1) 中。
但是我想使用 velero 作为 GKE 集群的灾难恢复工具,这样我就可以备份 europe-north1 区域的 GKE 集群并将它们恢复到 europe-west4 区域。在进一步的研究中,我发现 enabling CSI plugin对 velero 的支持,我将能够实现相同的目标。因此,我遵循了将 CSI 插件与 velero 一起使用的指南,但我仍然无法将永久磁盘 PVC 恢复到另一个区域。快照被视为多区域(例如,eu)。但是当我运行 velero restore 命令时,pod 创建(我使用 wordpress 和 mysql pod 作为示例)一直处于“待定”状态。
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.
此错误是因为 PVC 创建的 google 永久磁盘与 GKE 集群位于不同的区域。检查磁盘,我可以看到 restore 命令创建了两个磁盘,但它们仍然是在 europe-north1 区域(主 gke 集群区域)中创建的,而不是在辅助 gke 集群所在的 europe-west4 区域中创建的。
由于这是 velero(CSI 插件)的新功能,我找不到在 GCP 中使用它的任何文档(有一个文档显示 CSI implementation with Azure Disks )
CSI 插件使用 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 版本(使用 GcePersistentDiskCsiDriver=ENABLED 插件创建的 GKE 集群):
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/#installing-velero-with-csi-support
https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/gce-pd-csi-driver
任何帮助将非常感激。

最佳答案

在 GCP 中,VolumeSnapshots 默认是多区域的(但只有一个地理区域 - 美国、欧洲或亚洲)。我已经成功测试了 GCP 中从 us-central1 到 us-east4 的 StatefulSet 的跨区域还原。但需要注意的是,我使用了区域磁盘并使用 allowedTopologies 创建了区域/区域特定的存储类。配置。这是我的恢复 SC:

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
这是备份区域的 SC:
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 驱动程序不支持该参数(据我所知)。

关于kubernetes - 使用 CSI 插件使用 Velero 备份 GKE 集群时,无法将 GCP 永久磁盘 PVC 恢复到另一个区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63460096/

相关文章:

amazon-web-services - 如何仅针对某些 ip 地址在 Kubernetes 中公开 tcp 服务?

mongodb - 如何将本地文件复制到Helm部署中

postgresql - Helm/Kubernetes - 状态集和权限

Mercurial 本地存储库备份

iphone - 如何解密加密的 Apple iTunes iPhone 备份?

sql - TFS 2010 备份失败,出现 "The current username failed to retrieve MSSQL Server service account. "

openshift - 如何在 OpenShift Enterprise 3.2 中为 hawkular-metrics 创建重新加密路由

google-cloud-platform - 按用户/每次运行实现 GCP 计费的策略是什么?

java - 使用 Maven 自动为 Google Cloud Endpoints 应用生成 OpenApi 规范

google-cloud-platform - Google Cloud VM 实例卡在控制台建议的调整大小上