0%

Kubernets 之 Persistent Volume Claim

PersistentVolumeClaim(PVC)是用户存储请求。它类似于Pod。Pod消耗Node资源,PVC消耗PV资源。Pod可以请求特定级别的资源(CPU和内存)。PVC可以请求特定的大小和访问模式(例如,可以将它们安装为读/写一次或多次只读)的PV。

manifest示例

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-first-pvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: hostpath

volumeMode: 当请求使用特定访问模式进行存储时,PVC使用与PV相同的约定。
resources: PVC使用与PV相同的约定来表示将Volume作为文件系统或块设备使用。
storageClassName: PVC可以通过使用属性storageClassName指定StorageClass的名称来请求特定的StorageClass。只能将具有与PVC相同的storageClassName的PV绑定到PVC。
selector: PVC可以指定标签选择器以进一步过滤Volume。仅其标签与选择器匹配的PV可以绑定到PVC。

创建PVC

1
kubectl apply -f https://raw.githubusercontent.com/chengqing-su/kubernetes-learning/master/volumes/pvc-example.yaml

获取PVC状态,如下:
pvc

获取PV状态,如下:
pv

PVC as Volumes

Pod不能直接使用PV,需要通过PVC来使用

PVC必须与使用PVC的Pod在相同的namespace中。集群在Pod的namespace中找到PVC,并使用它来获取支持PVC的PersistentVolume。然后将卷安装到主机上并安装到Pod中。

创建一个nginx Pod并使用PVC。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
volumeMounts:
- mountPath: /usr/share/nginx/html
name: www-dir
volumes:
- name: www-dir
persistentVolumeClaim:
claimName: my-first-pvc