有什么方法可以将现有卷(我刚刚从快照恢复的卷)附加到 PVC?

mon*_*ty0 5 amazon-ebs kubernetes

我有一个用舵图创建的 mongodb-replicaset。该图表根据我提供的 StorageClass 创建 PVC。我用一个由对卷进行快照的 cron 作业拾取的标签来注释我的卷。

如果我需要从备份快照恢复,比如在另一个集群中,我知道我可以从快照创建一个卷,但我不知道如何将该卷转换为 StatefulSet 期望的 PVC 并且可以重新启动从。

mon*_*ty0 4

我了解到 aStatefulSet会寻找具有特定名称的 PVC。我从https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#limitations的文档中发现了这一点,其中说:

给定 Pod 的存储必须由 PersistentVolume Provisioner 根据请求的存储类进行配置,或者由管理员预先配置。

通过实验,我发现预配置只是意味着PersistentVolumeClaim用预期的名称创建 s。

我能够将 EBS 快照恢复到卷,创建PersistentVolume直接引用恢复的卷 ID,然后创建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
Run Code Online (Sandbox Code Playgroud)

请注意可用区域。由于我跨越了 3 个区域,因此我需要将三个快照恢复到单独的区域中,并确保PersistentVolume规范反映了这一点。