一、创建PVC的基本概念
通过之前的步骤配置好了 OpenShift Data Foundation (ODF),现在我们来看看如何在 OCP 集群中使用 ODF 提供的块存储 (Block Storage)。
在 OCP 中使用块存储通常涉及到以下几个步骤:
1. 检查可用的存储类 (StorageClass):
ODF 在部署完成后会自动创建一些存储类,用于提供不同特性的块存储。你需要找到与 ODF 相关的存储类。
oc get sc
应该能看到类似以下名称的存储类(具体名称可能因 ODF 版本和配置而异):
ocs-storagecluster-ceph-rbd
(通常用于提供基于 Ceph RBD 的块存储)- 可能还有其他具有不同特性的存储类。
选择你想要使用的存储类。通常,ocs-storagecluster-ceph-rbd
是一个不错的默认选择。
2. 创建持久卷声明 (PersistentVolumeClaim, PVC):
PVC 是用户向 OCP 请求持久存储的声明。你需要创建一个 PVC 对象,指定你希望使用的存储类以及所需的存储容量和访问模式。
创建一个 YAML 文件(例如 my-pvc.yaml
),内容如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-block-storage-claim
namespace: <your-namespace> # 替换为你的命名空间
spec:
accessModes:
- ReadWriteOnce # 或 ReadOnlyMany, ReadWriteMany,根据你的应用需求选择
resources:
requests:
storage: 10Gi # 替换为你需要的存储容量
storageClassName: ocs-storagecluster-ceph-rbd # 替换为你选择的 ODF 存储类名称
metadata.name
: 你为 PVC 指定的名称。metadata.namespace
: 你希望在这个命名空间下创建 PVC。spec.accessModes
: 定义了多个 Pod 如何访问该卷。ReadWriteOnce
(RWO): 只能被单个 Pod 以读写模式挂载。ReadOnlyMany
(ROX): 可以被多个 Pod 以只读模式挂载。ReadWriteMany
(RWX): 可以被多个 Pod 以读写模式挂载(ODF 可能需要特定的配置才能支持 RWX)。
spec.resources.requests.storage
: 你请求的存储容量大小。spec.storageClassName
: 指定你希望使用的 ODF 存储类。
保存文件后,使用 oc create
命令创建 PVC:
oc create -f my-pvc.yaml -n <your-namespace> # 替换为你的命名空间
3. 验证 PVC 是否已创建并绑定到持久卷 (PersistentVolume, PV):
使用以下命令查看 PVC 的状态:
oc get pvc -n <your-namespace>
应该看到你创建的 PVC 处于 Pending
状态,然后很快会变成 Bound
状态,并显示它绑定的 PV 的名称和分配的容量。
同时,可以使用以下命令查看 PV:
oc get pv
你应该能看到 ODF 自动为你创建了一个与你的 PVC 相匹配的 PV,并且该 PV 的 STORAGECLASS
列显示了你指定的存储类。
4. 在 Pod 中使用持久卷声明 (PVC):
现在可以在 Pod 定义中引用这个 PVC,将 ODF 提供的块存储挂载到你的容器中使用。
创建一个 YAML 文件(例如 my-pod.yaml
),内容如下:
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
namespace: <your-namespace> # 替换为你的命名空间
spec:
containers:
- name: my-container
image: registry.k8s.io/pause:latest # 替换为你的应用镜像
volumeMounts:
- name: my-volume
mountPath: /data # 容器内挂载路径
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-block-storage-claim # 引用你创建的 PVC 名称
spec.volumes.persistentVolumeClaim.claimName
: 引用你之前创建的 PVC 的名称。spec.containers.volumeMounts.mountPath
: 定义了在容器内部将该卷挂载到的路径。
保存文件后,使用 oc create
命令创建 Pod:
oc create -f my-pod.yaml -n <your-namespace> # 替换为你的命名空间
5. 验证 Pod 是否成功挂载了卷:
使用以下命令查看 Pod 的状态:
oc get pod -n <your-namespace>
确保 Pod 处于 Running
状态。然后,你可以进入 Pod 的容器内部,查看 /data
目录下是否成功挂载了 ODF 提供的块存储。
oc exec -it -n <your-namespace> my-app-pod -- /bin/bash
ls /data
exit
现在,你的 Pod 就可以在 /data
目录下读写 ODF 提供的持久化块存储了。
6.总结使用 ODF 块存储的步骤:
- 查看可用的存储类 (
oc get sc
). - 创建持久卷声明 (PVC) (
oc create -f <pvc_yaml>
). - 验证 PVC 是否已绑定到持久卷 (PV) (
oc get pvc
,oc get pv
). - 在 Pod 定义中引用 PVC (
spec.volumes.persistentVolumeClaim.claimName
). - 验证 Pod 是否成功挂载了卷 (
oc get pod
,oc exec -it <pod_name> -- ls <mount_path>
).
通过以上步骤,你的应用程序就可以利用 OpenShift Data Foundation 提供的持久化块存储了。记得根据你的应用需求选择合适的存储类和访问模式。
二、为IBM CP4BA创建PVC
在 Kubernetes 和 OpenShift 中,持久卷声明 (PVC) 是与特定的命名空间 (Namespace) 关联的。
这意味着,如果需要在 IBM-CP4BA
(假设IBM CP4BA部署在这个命名空间) 这个命名空间中使用块存储,需要在该命名空间下创建一个 PVC。这个 PVC 会声明需要的存储容量、访问模式以及使用的存储类(例如 ocs-storagecluster-ceph-rbd
)。
同一个存储类可以在不同的命名空间下创建多个独立的 PVC,每个 PVC 都会请求并绑定到 ODF 提供的独立的持久卷 (PV)。 这样,每个命名空间下的应用程序都可以拥有自己独立的、持久化的块存储空间,而不会相互干扰。
总结一下在 IBM-CP4BA
命名空间下使用块存储的步骤:
-
确保
ocs-storagecluster-ceph-rbd
存储类可用: 你可以使用oc get sc
命令在任何命名空间下查看集群中可用的存储类。 -
在
IBM-CP4BA
命名空间下创建 PVC: 创建一个 YAML 文件(例如ibm-cp4ba-pvc.yaml
),将metadata.namespace
设置为IBM-CP4BA
,并指定你需要的存储容量和ocs-storagecluster-ceph-rbd
作为storageClassName
。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ibm-cp4ba-block-storage-claim namespace: IBM-CP4BA spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi # 根据 IBM CP4BA 的需求调整容量 storageClassName: ocs-storagecluster-ceph-rbd
-
创建 PVC: 使用
oc create
命令在IBM-CP4BA
命名空间下创建这个 PVC。oc create -f ibm-cp4ba-pvc.yaml -n IBM-CP4BA
-
在
IBM-CP4BA
命名空间下的 Pod 中使用 PVC: 在你的 IBM CP4BA 应用的 Pod 定义中,将这个 PVC 挂载为一个卷。apiVersion: v1 kind: Pod metadata: name: ibm-cp4ba-app-pod namespace: IBM-CP4BA spec: containers: - name: ibm-cp4ba-container image: <your-ibm-cp4ba-image> volumeMounts: - name: storage-volume mountPath: /data # 应用内部的挂载路径 volumes: - name: storage-volume persistentVolumeClaim: claimName: ibm-cp4ba-block-storage-claim
通过以上步骤,IBM-CP4BA
命名空间下的 Pod 就可以使用 ODF 提供的持久化块存储了。每个需要块存储的命名空间都需要遵循类似的流程,创建属于该命名空间的 PVC。