GCE Kubernetes:持久磁盘和持久卷声明
GCE Kubernetes: Persistent disk and Persistent Volume claim
方法 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
方法三(pod直接使用google永久磁盘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
不知道在什么情况下应该用什么方法。
三种方法有什么区别?如果我想将数据存储在 google 永久性磁盘上,我应该使用哪一种?
从最好到最差的方法:
- 最佳:方法 2 - 动态卷配置
- 好的:方法 1 - 通过
PersistentVolumeClaim
预先配置的卷
- 最差:方法 3 - 通过 pod 直接引用磁盘 没有
PersistentVolumeClaim
方法 3 是最糟糕的,因为您失去了可移植性。如果将 Pod 移动到 GCE PD 不可用的 Kubernetes 集群,则必须使用新集群上可用的任何类型的存储修改 Pod。你不应该使用这种方法。
使用方法 1 和方法 2,您的 Pod
和 PersistentVolumeClaim
对象保持可移植性并且不包含特定于集群的详细信息。
如果您已有要与 Kubernetes 一起使用的现有磁盘,请使用方法 1(手动创建 PersistentVolumeClaim
和 PersistentVolume
)。首先,您创建一个 PersistentVolume
对象来表示 Kubernetes 中的磁盘,然后您创建一个 PersistentVolumeClaim
来绑定它并充当您可以在 Pod 中使用的指针。您必须小心确保对象相互指向,请参阅 了解如何做到这一点的详细信息。这是您应该用于 现有 GCE PD 的方法。
方法二(手动创建一个PersistentVolumeClaim
,让系统自动创建一个PersistentVolume
)。如果您的存储系统支持 Kubernetes 动态卷配置,您只需创建一个 PersistentVolumeClaim
对象,您的存储系统将自动创建一个新卷。 GCE 和 GKE 上的 Kubernetes 为 GCE PD 安装了默认的 StorageClass,因此这应该开箱即用,这是您应该用来创建和使用 new GCE PD 的方法。
有关所有这些的详细信息,请参阅 https://www.youtube.com/watch?v=uSxlgK1bCuA。
方法 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
方法三(pod直接使用google永久磁盘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
不知道在什么情况下应该用什么方法。
三种方法有什么区别?如果我想将数据存储在 google 永久性磁盘上,我应该使用哪一种?
从最好到最差的方法:
- 最佳:方法 2 - 动态卷配置
- 好的:方法 1 - 通过
PersistentVolumeClaim
预先配置的卷
- 最差:方法 3 - 通过 pod 直接引用磁盘 没有
PersistentVolumeClaim
方法 3 是最糟糕的,因为您失去了可移植性。如果将 Pod 移动到 GCE PD 不可用的 Kubernetes 集群,则必须使用新集群上可用的任何类型的存储修改 Pod。你不应该使用这种方法。
使用方法 1 和方法 2,您的 Pod
和 PersistentVolumeClaim
对象保持可移植性并且不包含特定于集群的详细信息。
如果您已有要与 Kubernetes 一起使用的现有磁盘,请使用方法 1(手动创建 PersistentVolumeClaim
和 PersistentVolume
)。首先,您创建一个 PersistentVolume
对象来表示 Kubernetes 中的磁盘,然后您创建一个 PersistentVolumeClaim
来绑定它并充当您可以在 Pod 中使用的指针。您必须小心确保对象相互指向,请参阅 了解如何做到这一点的详细信息。这是您应该用于 现有 GCE PD 的方法。
方法二(手动创建一个PersistentVolumeClaim
,让系统自动创建一个PersistentVolume
)。如果您的存储系统支持 Kubernetes 动态卷配置,您只需创建一个 PersistentVolumeClaim
对象,您的存储系统将自动创建一个新卷。 GCE 和 GKE 上的 Kubernetes 为 GCE PD 安装了默认的 StorageClass,因此这应该开箱即用,这是您应该用来创建和使用 new GCE PD 的方法。
有关所有这些的详细信息,请参阅 https://www.youtube.com/watch?v=uSxlgK1bCuA。