一、创建 PVC
PVC 作为用户对存储资源的需求申请,主要涉及存储空间请求、访问模式、PV 选择条件和存储类别等信息的设置。
上示例(申请 8GiB 存储空间,访问模式为 ReadOnlyMany,存储类别为“directpv-min-io”):
cat >test-direct-pvc.yaml <<EOF --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: testqijingpvc namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Mi storageClassName: direct-csi-min-io EOF
创建:
[root@k8s0 test_persistent_volume]# kubectl create -f test-direct-pvc.yaml persistentvolumeclaim/testqijingpvc created
验证:
[root@k8s0 test_persistent_volume]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mongo-persistent-storage-mongo-0 Bound pvc-cb9e0f2f-a5d2-4281-aa14-9881a8f7ef67 100Gi RWO direct-csi-min-io 9d mongo-persistent-storage-mongo-1 Bound pvc-51a693a3-a1cc-4e7e-97de-eb8c9162ac63 100Gi RWO direct-csi-min-io 9d mongo-persistent-storage-mongo-2 Bound pvc-3c6fa343-a13e-4fc3-93a8-8826a60405ba 100Gi RWO direct-csi-min-io 9d testpvc Bound pvc-3e802a9e-ab1b-46cc-829d-e5d107cb4308 100Mi RWO direct-csi-min-io 10m testqijingpvc Pending direct-csi-min-io 3s
二、Pod 使用 PVC
在PVC 创建成功之后,Pod 就可以以存储卷(Volume)的方式使用 PVC 的存储资源了。PVC 受限于命名空间,Pod 在使用 PVC 时,必须与 PVC 处于同一个命名空间。
Kubernetes 为 Pod 挂载 PVC 的过程如下:系统在 Pod 所在的命名空间中找到其配置的 PVC,然后找到 PVC 绑定的后端 PV,将 PV 存储挂载到 Pod,将 PV 存储挂载到 Pod 所在的 Node 的目录下,最后将 Node 的目录挂载到 Pod 的容器内。
在 Pod 中使用 PVC 时,需要在 YAML 配置中设置 PVC 类型的 Volume,然后在容器中通过 volumeMounts.mountPath 设置容器内的挂载目录,示例如下:
[root@k8s0 test_persistent_volume]# cat > test-qijing-pod.yaml <<EOF apiVersion: v1 kind: Pod metadata: name: qijing-test-pod spec: containers: - name: myfronted image: nginx volumeMounts: - mountPath: "/var/www/html" name: qijingpd volumes: - name: qijingpd persistentVolumeClaim: claimName: testqijingpvc EOF
创建:
[root@k8s0 test_persistent_volume]# kubectl create -f test-qijing-pod.yaml pod/qijing-test-pod created
验证:
pod/qijing-test-pod created [root@k8s0 test_persistent_volume]# kubectl get po NAME READY STATUS RESTARTS AGE qijing-test-pod 1/1 Running 0 18s
进入容器内部执行:df -h
可以看到指定的目录确实挂载了一个盘,验证成功。