使用文件存储CFS
容器引擎 CCE 支持通过创建 PV/PVC,并为工作负载挂载数据卷方式使用百度智能云文件存储CFS。本文将介绍如何在集群中动态和静态挂载文件存储。
使用限制
- 创建的 CFS 实例和挂载点须和集群节点在同一 VPC 内。
前提条件
操作步骤
本文以 CFS 挂载点地址为 cfs-test.baidubce.com 为例。
动态 PV/PVC 方式挂载 CFS
方式一:使用 kubectl 命令行操作
1. 创建 StorageClass 和 Provisioner
dynamic-cfs-template.yaml 是一个 yaml 文件模板,包含了需要创建的集群资源信息。
dynamic-cfs-template.yaml 文件内容如下:
1 kind: ClusterRole
2 apiVersion: rbac.authorization.k8s.io/v1
3 metadata:
4 name: nfs-client-provisioner-runner
5 rules:
6 - apiGroups: [""]
7 resources: ["persistentvolumes"]
8 verbs: ["get", "list", "watch", "create", "delete"]
9 - apiGroups: [""]
10 resources: ["persistentvolumeclaims"]
11 verbs: ["get", "list", "watch", "update"]
12 - apiGroups: ["storage.k8s.io"]
13 resources: ["storageclasses"]
14 verbs: ["get", "list", "watch"]
15 - apiGroups: [""]
16 resources: ["events"]
17 verbs: ["create", "update", "patch"]
18 ---
19 kind: ClusterRoleBinding
20 apiVersion: rbac.authorization.k8s.io/v1
21 metadata:
22 name: run-nfs-client-provisioner
23 subjects:
24 - kind: ServiceAccount
25 name: nfs-client-provisioner
26 namespace: kube-system
27 roleRef:
28 kind: ClusterRole
29 name: nfs-client-provisioner-runner
30 apiGroup: rbac.authorization.k8s.io
31 ---
32 kind: Role
33 apiVersion: rbac.authorization.k8s.io/v1
34 metadata:
35 name: leader-locking-nfs-client-provisioner
36 namespace: kube-system
37 rules:
38 - apiGroups: [""]
39 resources: ["endpoints"]
40 verbs: ["get", "list", "watch", "create", "update", "patch"]
41 ---
42 kind: RoleBinding
43 apiVersion: rbac.authorization.k8s.io/v1
44 metadata:
45 name: leader-locking-nfs-client-provisioner
46 namespace: kube-system
47 subjects:
48 - kind: ServiceAccount
49 name: nfs-client-provisioner
50 # replace with namespace where provisioner is deployed
51 namespace: kube-system
52 roleRef:
53 kind: Role
54 name: leader-locking-nfs-client-provisioner
55 apiGroup: rbac.authorization.k8s.io
56 ---
57 kind: ServiceAccount
58 apiVersion: v1
59 metadata:
60 name: nfs-client-provisioner
61 namespace: kube-system
62 ---
63 kind: PersistentVolume
64 apiVersion: v1
65 metadata:
66 name: pv-cfs
67 spec:
68 capacity:
69 storage: 5Gi
70 accessModes:
71 - ReadWriteMany
72 persistentVolumeReclaimPolicy: Retain
73 mountOptions:
74 - hard
75 - nfsvers=4.1
76 - nordirplus
77 nfs:
78 path: {{NFS_PATH}}
79 server: {{NFS_SERVER}}
80 ---
81 kind: PersistentVolumeClaim
82 apiVersion: v1
83 metadata:
84 name: pvc-cfs
85 namespace: kube-system
86 spec:
87 accessModes:
88 - ReadWriteMany
89 resources:
90 requests:
91 storage: 5Gi
92 ---
93 kind: Deployment
94 apiVersion: apps/v1
95 metadata:
96 name: nfs-client-provisioner
97 namespace: kube-system
98 spec:
99 selector:
100 matchLabels:
101 app: nfs-client-provisioner
102 replicas: 1
103 strategy:
104 type: Recreate
105 template:
106 metadata:
107 labels:
108 app: nfs-client-provisioner
109 spec:
110 serviceAccountName: nfs-client-provisioner
111 containers:
112 - name: nfs-client-provisioner
113 image: registry.baidubce.com/cce-plugin-pro/nfs-client-provisioner:latest
114 imagePullPolicy: Always
115 volumeMounts:
116 - name: nfs-client-root
117 mountPath: /persistentvolumes
118 env:
119 - name: PROVISIONER_NAME
120 value: {{PROVISIONER_NAME}}
121 - name: NFS_SERVER
122 value: {{NFS_SERVER}}
123 - name: NFS_PATH
124 value: {{NFS_PATH}}
125 volumes:
126 - name: nfs-client-root
127 persistentVolumeClaim:
128 claimName: pvc-cfs
129 ---
130 kind: StorageClass
131 apiVersion: storage.k8s.io/v1
132 metadata:
133 name: {{STORAGE_CLASS_NAME}}
134 provisioner: {{PROVISIONER_NAME}}
135 parameters:
136 archiveOnDelete: "{{ARCHIVE_ON_DELETE}}"
137 sharePath: "{{SHARE_PATH}}"
138 mountOptions:
139 - hard
140 - nfsvers=4.1
141 - nordirplus
dynamic-cfs-template.yaml 模板文件中可自定义的选项及说明如下:
选项 | 说明 |
---|---|
NFS_SERVER | CFS 挂载点地址。 |
NFS_PATH | CFS 远程挂载目录,注意该目录在使用前需要预先存在,如果目录不存在会导致 provisioner 插件启动失败。 |
SHARE_PATH | 不同 PVC 的 CFS 挂载目录是否隔离,true-不隔离,false-隔离。若指定隔离,则会在 CFS 挂载目录下为每个 PVC 创建一个子目录,对应 PVC 使用该子目录作为挂载目录;否则所有 PVC 共享挂载目录。 |
ARCHIVE_ON_DELETE | 删除 PVC 后是否保留对应数据,仅当 PVC 挂载目录隔离时生效,true-保留,false-不保留;PVC 挂载目录共享时,删除 PVC 不会删除任何数据。设置为不保留则直接删除对应 PVC 的子目录,否则仅将原子目录名加上 archive- 前缀后保留。 |
STORAGE_CLASS_NAME | 创建的 StorageClass 名称。 |
PROVISIONER_NAME | Provisioner 名称。 |
支持 shell 的系统中,可以直接使用下面的 replace.sh 脚本进行 yaml 模板中模板变量的替换操作。
1 # !/bin/sh
2 # user defined vars
3
4NFS_SERVER="cfs-test.baidubce.com"
5NFS_PATH="/cce/shared"
6SHARE_PATH="true" # 不同PVC的挂载目录是否隔离,true-不隔离,false-隔离
7ARCHIVE_ON_DELETE="false" # 删除PVC是否保留对应数据,仅当PVC挂载目录隔离时生效,true-保留,false-不保留
8STORAGE_CLASS_NAME="sharedcfs" # StorageClass名称
9PROVISIONER_NAME="baidubce/cfs-provisioner" # provisioner名称
10
11YAML_FILE="./dynamic-cfs-template.yaml"
12
13 # replace template vars in yaml file
14
15sed -i "s#{{SHARE_PATH}}#$SHARE_PATH#" $YAML_FILE
16sed -i "s#{{ARCHIVE_ON_DELETE}}#$ARCHIVE_ON_DELETE#" $YAML_FILE
17sed -i "s#{{STORAGE_CLASS_NAME}}#$STORAGE_CLASS_NAME#" $YAML_FILE
18sed -i "s#{{PROVISIONER_NAME}}#$PROVISIONER_NAME#" $YAML_FILE
19sed -i "s#{{NFS_SERVER}}#$NFS_SERVER#" $YAML_FILE
20sed -i "s#{{NFS_PATH}}#$NFS_PATH#" $YAML_FILE
- 将脚本中前半段中的 shell 变量替换为期望值,将 replace.sh 脚本和 dynamic-cfs-template.yaml 文件放置在同一个目录下,执行
sh replace.sh
即可。 - 或者采用其他方式,将模板 yaml 文件中的模板变量替换为期望值。
-
最后,使用 kubectl 工具,执行
kubectl create -f dynamic-cfs-template.yaml
完成 StorageClass 和 Provisioner 的创建。Kubectl1$ kubectl create -f dynamic-cfs-template.yaml 2clusterrole "nfs-client-provisioner-runner" created 3clusterrolebinding "run-nfs-client-provisioner" created 4role "leader-locking-nfs-client-provisioner" created 5rolebinding "leader-locking-nfs-client-provisioner" created 6serviceaccount "nfs-client-provisioner" created 7persistentvolume "pv-cfs" created 8persistentvolumeclaim "pvc-cfs" created 9deployment "nfs-client-provisioner" created 10storageclass "sharedcfs" created 11$ kubectl get pod --namespace kube-system | grep provisioner 12nfs-client-provisioner-c94494f6d-dlxmj 1/1 Running 0 26s
如果相应的 Pod 进入 Running 状态,则动态绑定 PV 所需的资源已经建立成功。
2. 创建 PVC 时动态生成 PV 并绑定
- 在 PVC Spec 中指定上面创建的 StorageClass 名称,则在创建 PVC 时,会自动调用相应 StorageClass 绑定的 Provisioner 生成相应的 PV 进行绑定。
- 使用 kubectl,执行
kubectl create -f dynamic-pvc-cfs.yaml
完成 PVC 的创建。 -
假设创建的 StorageClass 名称为
sharedcfs
,对应的 dynamic-pvc-cfs.yaml 文件如下所示:YAML1kind: PersistentVolumeClaim 2apiVersion: v1 3metadata: 4 name: dynamic-pvc-cfs 5spec: 6 accessModes: 7 - ReadWriteMany 8 storageClassName: sharedcfs 9 resources: 10 requests: 11 storage: 5Gi
-
创建 PVC 后,可以看见相应的 PV 自动创建,PVC 状态变为
Bound
,即 PVC 已经与新创建的 PV 绑定。Kubectl1$ kubectl create -f dynamic-pvc-cfs.yaml 2persistentvolumeclaim "dynamic-pvc-cfs" created 3$ kubectl get pvc 4NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE 5dynamic-pvc-cfs Bound pvc-6dbf3265-bbe0-11e8-bc54-fa163e08135d 5Gi RWX sharedcfs 4s 6$ kubectl get pv 7NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE 8pv-cfs 5Gi RWX Retain Bound kube-system/pvc-cfs 21m 9pvc-6dbf3265-bbe0-11e8-bc54-fa163e08135d 5Gi RWX Delete Bound default/dynamic-pvc-cfs sharedcfs 7s
3. 在 Pod 内挂载 PVC
- 在 Pod spec 内指定相应的 PVC 名称即可,使用 kubectl,执行
kubectl create -f dynamic-cfs-pod.yaml
完成资源的创建。 -
对应的
dynamic-cfs-pod.yaml
文件如下所示:YAML1kind: Pod 2apiVersion: v1 3metadata: 4 name: test-pvc-pod 5 labels: 6 app: test-pvc-pod 7spec: 8 containers: 9 - name: test-pvc-pod 10 image: nginx 11 volumeMounts: 12 - name: cfs-pvc 13 mountPath: "/cfs-volume" 14 volumes: 15 - name: cfs-pvc 16 persistentVolumeClaim: 17 claimName: dynamic-pvc-cfs
Pod 创建后,可以读写容器内的 /cfs-volume
路径来访问相应的 CFS 存储上的内容。
4. 释放 PVC 时动态销毁绑定 PV
删除 PVC 时,与之绑定的动态 PV 会被一同删除,其中的数据则根据用户定义的 SHARE_PATH
和 ARCHIVE_ON_DELETE
选项进行相应的保留或删除处理。
1$ kubectl get pvc
2NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
3dynamic-pvc-cfs Bound pvc-6dbf3265-bbe0-11e8-bc54-fa163e08135d 5Gi RWX sharedcfs 9m
4$ kubectl get pv
5NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
6pv-cfs 5Gi RWX Retain Bound kube-system/pvc-cfs 31m
7pvc-6dbf3265-bbe0-11e8-bc54-fa163e08135d 5Gi RWX Delete Bound default/dynamic-pvc-cfs sharedcfs 9m
8$ kubectl delete -f dynamic-pvc-cfs.yaml
9persistentvolumeclaim "dynamic-pvc-cfs" deleted
10$ kubectl get pv
11NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
12pv-cfs 5Gi RWX Retain Bound kube-system/pvc-cfs 31m
13$ kubectl get pvc
14No resources found.
方式二:通过控制台操作
- 登陆 CCE 控制台,单击集群名称进入集群详情页。
-
创建Provisioner。
a. 在左侧导航栏中选择工作负载 > 自定义资源,进入自定义资源管理页面。
b. 点击页面上方YAML创建资源按钮,在弹框中分别创建以下资源。
YAML1kind: ClusterRole 2apiVersion: rbac.authorization.k8s.io/v1 3metadata: 4 name: nfs-client-provisioner-runner 5rules: 6 - apiGroups: [""] 7 resources: ["persistentvolumes"] 8 verbs: ["get", "list", "watch", "create", "delete"] 9 - apiGroups: [""] 10 resources: ["persistentvolumeclaims"] 11 verbs: ["get", "list", "watch", "update"] 12 - apiGroups: ["storage.k8s.io"] 13 resources: ["storageclasses"] 14 verbs: ["get", "list", "watch"] 15 - apiGroups: [""] 16 resources: ["events"] 17 verbs: ["create", "update", "patch"] 18--- 19kind: ClusterRoleBinding 20apiVersion: rbac.authorization.k8s.io/v1 21metadata: 22 name: run-nfs-client-provisioner 23subjects: 24 - kind: ServiceAccount 25 name: nfs-client-provisioner 26 namespace: kube-system 27roleRef: 28 kind: ClusterRole 29 name: nfs-client-provisioner-runner 30 apiGroup: rbac.authorization.k8s.io 31--- 32kind: Role 33apiVersion: rbac.authorization.k8s.io/v1 34metadata: 35 name: leader-locking-nfs-client-provisioner 36 namespace: kube-system 37rules: 38 - apiGroups: [""] 39 resources: ["endpoints"] 40 verbs: ["get", "list", "watch", "create", "update", "patch"] 41--- 42kind: RoleBinding 43apiVersion: rbac.authorization.k8s.io/v1 44metadata: 45 name: leader-locking-nfs-client-provisioner 46 namespace: kube-system 47subjects: 48 - kind: ServiceAccount 49 name: nfs-client-provisioner 50 # replace with namespace where provisioner is deployed 51 namespace: kube-system 52roleRef: 53 kind: Role 54 name: leader-locking-nfs-client-provisioner 55 apiGroup: rbac.authorization.k8s.io 56--- 57apiVersion: v1 58kind: ServiceAccount 59metadata: 60 name: nfs-client-provisioner 61 namespace: kube-system 62--- 63kind: PersistentVolume 64apiVersion: v1 65metadata: 66 name: pv-cfs 67spec: 68 capacity: 69 storage: 5Gi 70 accessModes: 71 - ReadWriteMany 72 persistentVolumeReclaimPolicy: Retain 73 mountOptions: 74 - hard 75 - nfsvers=4.1 76 - nordirplus 77 nfs: 78 path: {{NFS_PATH}} 79 server: {{NFS_SERVER}} 80--- 81kind: PersistentVolumeClaim 82apiVersion: v1 83metadata: 84 name: pvc-cfs 85 namespace: kube-system 86spec: 87 accessModes: 88 - ReadWriteMany 89 resources: 90 requests: 91 storage: 5Gi 92--- 93kind: Deployment 94apiVersion: apps/v1 95metadata: 96 name: nfs-client-provisioner 97 namespace: kube-system 98spec: 99 selector: 100 matchLabels: 101 app: nfs-client-provisioner 102 replicas: 1 103 strategy: 104 type: Recreate 105 template: 106 metadata: 107 labels: 108 app: nfs-client-provisioner 109 spec: 110 serviceAccountName: nfs-client-provisioner 111 containers: 112 - name: nfs-client-provisioner 113 image: registry.baidubce.com/cce-plugin-pro/nfs-client-provisioner:latest 114 imagePullPolicy: Always 115 volumeMounts: 116 - name: nfs-client-root 117 mountPath: /persistentvolumes 118 env: 119 - name: PROVISIONER_NAME 120 value: {{PROVISIONER_NAME}} # 指定 Provisioner 名称 121 - name: NFS_SERVER 122 value: {{NFS_SERVER}} # 指定 CFS 挂载点地址 123 - name: NFS_PATH 124 value: {{NFS_PATH}} # 指定 CFS 远程挂载目录,注意该目录在使用前需要预先存在,如果目录不存在会导致 provisioner 插件启动失败 125 volumes: 126 - name: nfs-client-root 127 persistentVolumeClaim: 128 claimName: pvc-cfs
-
创建存储类 StorageClass。
a. 在左侧导航栏中选择存储配置 > 存储类,进入存储类列表页面。
b. 点击存储类列表上方新建存储类按钮,在文件模版中输入以下 yaml 内容。
YAML1 kind: StorageClass 2 apiVersion: storage.k8s.io/v1 3 metadata: 4 name: {{STORAGE_CLASS_NAME}} # 指定 StorageClass 名称 5 provisioner: {{PROVISIONER_NAME}} # 指定创建的 Provisioner 名称 6 parameters: 7 archiveOnDelete: "{{ARCHIVE_ON_DELETE}}" # 删除 PVC 后是否保留对应数据,仅当 PVC 挂载目录隔离时生效,true-保留,false-不保留;PVC 挂载目录共享时,删除 PVC 不会删除任何数据。设置为不保留则直接删除对应 PVC 的子目录,否则仅将原子目录名加上 archive- 前缀后保留。 8 sharePath: "{{SHARE_PATH}}" # 不同 PVC 的 CFS 挂载目录是否隔离,true-不隔离,false-隔离。若指定隔离,则会在 CFS 挂载目录下为每个 PVC 创建一个子目录,对应 PVC 使用该子目录作为挂载目录;否则所有 PVC 共享挂载目录。 9 mountOptions: 10 - hard 11 - nfsvers=4.1 12 - nordirplus
c. 点击确定,将为您创建存储类。
-
创建持久卷声明 PVC 后动态生成 PV 并绑定。
a. 在左侧导航栏选择存储配置 > 持久卷声明,进入持久卷声明列表。
b. 点击持久卷声明列表上方新建持久卷声明按钮,选择表单创建或 Yaml 创建。
c. 若选择表单创建则需填写相关参数,其中三种访问模式详情参见存储管理概述,点击确定后在确认配置弹窗中输入
storageClassName
的值,即存储类的名称。确认配置无误后点击确定。d. 若选择YAML创建,在文件模版中输入以下 yaml 内容。
YAML1 kind: PersistentVolumeClaim 2 apiVersion: v1 3 metadata: 4 name: pvc-cfs 5 namespace: kube-system 6 spec: 7 accessModes: 8 - ReadWriteMany 9 storageClassName: {{STORAGE_CLASS_NAME}} # 指定创建的 StorageClass 名称 10 resources: 11 requests: 12 storage: 5Gi
e. 创建 PVC 后,在持久卷声明列表 > 持久卷列可以看见相应的 PV 自动创建,PVC 状态列显示为 Bound,即 PVC 已经与新创建的 PV 绑定。
- 创建应用并挂载 PVC,在 Pod spec 内指定相应的 PVC 名称即可。Pod 创建后,可以读写容器内的 /cfs-volume 路径来访问相应的 CFS 存储上的内容。
静态 PV/PVC 方式挂载 CFS
方式一:通过 kubectl 命令行操作
1. 在集群中创建 PV 和 PVC 资源
- 使用kubectl,执行
kubectl create -f pv-cfs.yaml
完成 PV 的创建 -
对应的
pv-cfs.yaml
文件如下所示:YAML1kind: PersistentVolume 2apiVersion: v1 3metadata: 4 name: pv-cfs 5spec: 6 capacity: 7 storage: 8Gi 8 accessModes: 9 - ReadWriteMany 10 persistentVolumeReclaimPolicy: Retain 11 mountOptions: 12 - hard 13 - nfsvers=4.1 14 - nordirplus 15 nfs: 16 path: / 17 server: cfs-test.baidubce.com
注意:
- yaml 中 server 字段对应的是 CFS 挂载点地址。
- yaml 中 path 字段对应的是 CFS 挂载目录,该目录需要在挂载前预先存在。
创建 PV 后,输入kubectl get pv
可以看见一个 available 状态的 PV,如下所示:
1$ kubectl get pv
2NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3pv-cfs 8Gi RWX Retain Available 3s
建立一个能够与该 PV 绑定的 PVC
使用 kubectl,执行 kubectl create -f pvc-cfs.yaml
完成 PVC 的创建
对应的 pvc-cfs.yaml
文件如下所示:
1kind: PersistentVolumeClaim
2apiVersion: v1
3metadata:
4 name: pvc-cfs
5spec:
6 accessModes:
7 - ReadWriteMany
8 resources:
9 requests:
10 storage: 8Gi
绑定前,PVC 为 pending 状态
1$ kubectl get pvc
2NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
3pvc-cfs Pending 2s 2s
绑定后,PV 和 PVC 状态变为 Bound
1$ kubectl get pv
2NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
3pv-cfs 8Gi RWX Retain Bound default/pvc-cfs 36s
4$ kubectl get pvc
5NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
6pvc-cfs Bound pv-cfs 8Gi RWX 1m
有关 PV 和 PVC 的更多设置和字段说明,参见k8s官方文档
2. 在 Pod 内挂载 PVC
在 Pod spec 内指定相应的 PVC 名称即可,使用 kubectl,执行 kubectl create -f demo-cfs-pod.yaml
完成 Pod 的创建
对应的 demo-cfs-pod.yaml
文件如下所示:
1kind: Pod
2apiVersion: v1
3metadata:
4 name: demo-cfs-pod
5 labels:
6 app: demo-cfs-pod
7spec:
8 containers:
9 - name: nginx
10 image: nginx
11 volumeMounts:
12 - name: cfs-pvc
13 mountPath: "/cfs-volume"
14 volumes:
15 - name: cfs-pvc
16 persistentVolumeClaim:
17 claimName: pvc-cfs
Pod 创建后,可以读写容器内的 /cfs-volume
路径来访问相应的 CFS 存储上的内容。
由于创建 PV 和 PVC 时指定了 accessModes
为 ReadWriteMany
,该 PVC 可以被多节点上的 Pod 挂载读写。
3. 释放 PV 和 PVC 资源
完成存储资源的使用后,可以释放 PVC 和 PV 资源。在释放 PVC 和 PV 之前,需要先删除挂载了对应 PVC 的所有 Pod。
使用以下命令可以释放 PVC
1$ kubectl delete -f pvc-cfs.yaml
释放 PVC 后,原来与之绑定的 PV 状态会变为 Release,如下所示:
1NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
2pv-cfs 8Gi RWX Retain Released default/pvc-cfs 16m
输入以下指令释放 PV 资源
1$ kubectl delete -f pv-cfs.yaml
方式二:通过控制台操作
- 登陆 CCE 控制台,单击集群名称进入集群详情页。
-
创建持久卷 PV。
a. 在左侧导航栏选择存储配置 > 持久卷,进入持久卷列表。
b. 点击持久卷列表上方新建持久卷按钮,选择表单创建或 Yaml 创建。
c. 若选择表单创建则需填写相关参数,根据需求设置存储容量,存储类型选择文件存储 CFS。挂载点地址可参见获取挂载地址。点击确定在二次弹窗中确认配置后点击确定创建 PV。
-
创建可以和持久卷 PV 绑定的持久卷声明 PVC。
a. 在左侧导航栏选择存储配置 > 持久卷声明,进入持久卷声明列表。
b. 点击持久卷列表上方新建持久卷声明按钮,选择表单创建或 Yaml 创建。
c. 根据之前创建的 PV 配置 PVC 的存储容量、访问模式、存储类(可选),点击确定创建 PVC。会查找现有的 PV 资源,寻找与 PVC 请求相匹配的 PV。
d. 绑定后,可以分别在持久卷列表和持久卷声明列表中看见 PV 和 PVC 的状态列变为 Bound。
- 创建应用并挂载 PVC,在 Pod spec 内指定相应的 PVC 名称即可。