28.11.3. 场景 2:如何为集群启用默认 StorageClass 行为
在这个示例中,cluster-admin
或 storage-admin
为所有没有在其声明中隐式指定了 StorageClass 的其他用户和项目启用一个默认存储类。这对 cluster-admin
或 storage-admin
有助于提供轻松管理存储卷,而无需在集群中设置或通信专用 StorageClasses。
这个示例基于 第 28.11.2 节 “情况 1:使用两种 StorageClass 类型的基本动态置备” 构建。cluster-admin
或 storage-admin
将创建另一个 StorageClass 以设计为 默认的 StorageClass。
例 28.18. 默认 StorageClass 对象定义
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: generic 1 annotations: storageclass.kubernetes.io/is-default-class: "true" 2 provisioner: kubernetes.io/gce-pd parameters: type: pd-standard zone: us-east1-d
作为 cluster-admin
或 storage-admin
将定义保存到 YAML 文件(generic-gce.yaml
),然后创建 StorageClasses :
# oc create -f generic-gce.yaml storageclass "generic" created # oc get storageclass NAME TYPE generic kubernetes.io/gce-pd fast kubernetes.io/gce-pd slow kubernetes.io/gce-pd
作为常规用户,在不满足任何 StorageClass 要求的情况下创建一个新的声明定义,并将它保存到文件(generic-pvc.yaml
)。
例 28.19. 默认 存储声明对象定义
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-engineering2 spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi
执行它并检查声明是否绑定:
# oc create -f generic-pvc.yaml
persistentvolumeclaim "pvc-engineering2" created
3s
# oc get pvc
NAME STATUS VOLUME CAPACITY ACCESSMODES AGE
pvc-engineering Bound pvc-e9b4fef7-8bf7-11e6-9962-42010af00004 10Gi RWX 41m
pvc-engineering2 Bound pvc-a9f70544-8bfd-11e6-9962-42010af00004 5Gi RWX 7s 1
- 1
pvc-engineering2
默认绑定到动态置备的卷。
作为 cluster-admin
或 storage-admin
,查看目前定义的持久性卷:
# oc get pv NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE pvc-a9f70544-8bfd-11e6-9962-42010af00004 5Gi RWX Delete Bound rh-eng/pvc-engineering2 5m 1 pvc-ba4612ce-8b4d-11e6-9962-42010af00004 5Gi RWO Delete Bound mytest/gce-dyn-claim1 21h pvc-e9b4fef7-8bf7-11e6-9962-42010af00004 10Gi RWX Delete Bound rh-eng/pvc-engineering 46m 2
使用 GCE (未动态置备)创建手动置备的磁盘。然后创建一个 持久性卷,以连接到新的 GCE 磁盘(pv-manual-gce.yaml
)。
例 28.20. 手动 PV 对象片段
apiVersion: v1 kind: PersistentVolume metadata: name: pv-manual-gce spec: capacity: storage: 35Gi accessModes: - ReadWriteMany gcePersistentDisk: readOnly: false pdName: the-newly-created-gce-PD fsType: ext4
执行对象定义文件:
# oc create -f pv-manual-gce.yaml
现在再次查看 PV。请注意,pv-manual-gce
卷 可用。
# oc get pv NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE pv-manual-gce 35Gi RWX Retain Available 4s pvc-a9f70544-8bfd-11e6-9962-42010af00004 5Gi RWX Delete Bound rh-eng/pvc-engineering2 12m pvc-ba4612ce-8b4d-11e6-9962-42010af00004 5Gi RWO Delete Bound mytest/gce-dyn-claim1 21h pvc-e9b4fef7-8bf7-11e6-9962-42010af00004 10Gi RWX Delete Bound rh-eng/pvc-engineering 53m
现在,创建与 generic-pvc.yaml
PVC 定义相同的另一个声明,但更改名称且不设置存储类名称。
例 28.21. 声明对象定义
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-engineering3 spec: accessModes: - ReadWriteMany resources: requests: storage: 15Gi
因为在这个实例中启用了 默认 StorageClass,所以手动创建的 PV 不满足声明请求。用户接收新的动态置备的持久性卷。
# oc get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE pvc-engineering Bound pvc-e9b4fef7-8bf7-11e6-9962-42010af00004 10Gi RWX 1h pvc-engineering2 Bound pvc-a9f70544-8bfd-11e6-9962-42010af00004 5Gi RWX 19m pvc-engineering3 Bound pvc-6fa8e73b-8c00-11e6-9962-42010af00004 15Gi RWX 6s
由于在这个系统上启用了 默认 StorageClass,因此手动创建的持久性卷以通过上述声明绑定且没有绑定新的动态置备的卷,所以需要在默认 StorageClass 中创建 PV。
由于在这个系统中启用了 默认 StorageClass,您需要在手动创建的持久性卷的默认 StorageClass 中创建 PV,以便绑定到上述声明,且没有绑定到该声明的新动态置备卷。
要解决这个问题,cluster-admin
或 storage-admin
用户只需要创建另一个 GCE 磁盘或删除第一个手动 PV,并使用分配 StorageClass 名称(pv-manual-gce2.yaml
)的 PV 对象定义:
例 28.22. 使用 default StorageClass 名称的手动 PV Spec
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-manual-gce2
spec:
capacity:
storage: 35Gi
accessModes:
- ReadWriteMany
gcePersistentDisk:
readOnly: false
pdName: the-newly-created-gce-PD
fsType: ext4
storageClassName: generic 1
- 1
- 之前创建的 通用 StorageClass 的名称。
执行对象定义文件:
# oc create -f pv-manual-gce2.yaml
列出 PV:
# oc get pv NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE pv-manual-gce 35Gi RWX Retain Available 4s 1 pv-manual-gce2 35Gi RWX Retain Bound rh-eng/pvc-engineering3 4s 2 pvc-a9f70544-8bfd-11e6-9962-42010af00004 5Gi RWX Delete Bound rh-eng/pvc-engineering2 12m pvc-ba4612ce-8b4d-11e6-9962-42010af00004 5Gi RWO Delete Bound mytest/gce-dyn-claim1 21h pvc-e9b4fef7-8bf7-11e6-9962-42010af00004 10Gi RWX Delete Bound rh-eng/pvc-engineering 53m
请注意,所有动态部署的卷都默认为 RECLAIMPOLICY Delete。当 PVC 动态绑定到 PV 后,GCE 卷会被删除,并会丢失所有数据。但是,手动创建的 PV 的默认 RECLAIMPOLICY 为 Retain。