2

方法 1(kubernetes 卷附加到 google 永久磁盘,kubernetes 卷声明附加到 kubernetes 卷)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: volume-1
spec:
  storageClassName: ""
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: pd-test-1
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pv-claim-1
spec:
  storageClassName: ""
  volumeName: volume-1
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

方法 2(Kubernetes 卷声明直接附加到 google 永久磁盘)

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pv-claim-1
spec:
  volumeName: pd-test-1
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

方法3(pod直接使用googlepersistent disk docs

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    # This GCE PD must already exist.
    gcePersistentDisk:
      pdName: my-data-disk
      fsType: ext4

我不确定在哪种情况下应该使用哪种方法。
如果我想在谷歌永久磁盘上存储数据,三种方法有什么区别?我应该使用哪一种?

4

1 回答 1

4

按从最佳到最差的顺序:

  • 最佳:方法 2 - 动态卷配置
  • 好的:方法 1 - 通过预配置卷PersistentVolumeClaim
  • 最差:方法 3 - 通过 pod 直接引用磁盘,无需 PersistentVolumeClaim

方法 3 是最糟糕的,因为您失去了可移植性。如果您将您的 pod 移动到 GCE PD 不可用的 Kubernetes 集群,您将不得不使用新集群上可用的任何类型的存储来修改您的 pod。你不应该使用这种方法。

使用方法 1 和 2,您的对象PodPersistentVolumeClaim对象都可以移植,并且其中不包含特定于集群的详细信息。

如果您已经有一个想要与 Kubernetes 一起使用的现有磁盘,请使用方法 1(手动创建PersistentVolumeClaim和)。PersistentVolume首先,您创建一个PersistentVolume对象来表示 Kubernetes 中的磁盘,然后创建一个PersistentVolumeClaim来绑定它并充当您可以在 Pod 中使用的指针。您必须小心确保对象相互指向,有关如何执行此操作的详细信息,请参阅https://stackoverflow.com/a/34323691/5443528 。这是您应该用于现有GCE PD 的方法。

方法2(手动创建一个PersistentVolumeClaim,让系统自动创建一个PersistentVolume)。如果您的存储系统支持 Kubernetes 动态卷配置,您只需创建一个PersistentVolumeClaim对象,您的存储系统就会自动创建一个新卷。GCE 和 GKE 上的 Kubernetes 为 GCE PD 安装了默认的 StorageClass,所以这应该是开箱即用的,这是您应该用来创建和使用GCE PD 的方法。

有关所有这些的详细信息,请参阅https://www.youtube.com/watch?v=uSxlgK1bCuA

于 2019-01-18T00:14:00.537 回答