CKA [Storage] – PV和PVC的讲解
k8s 有了volume为什么还需要pv?
- 开发者无需关心存储的管理,只需要为pod请求想用的storage即可,storage就交给storage administrator来管理就好。
- PV是Persistent volume永久存储的,就算pod被删了数据都还在

解耦开发者和底层存储资源
实现了开发和基础设施的分离
- 开发者只管发出
PVC
请求(像说“我要一块磁盘”) - 存储管理员配置
PV
(来自 NFS、iSCSI、云磁盘等) - K8s 会根据 PVC 匹配合适的 PV(自动或手动)
以下是从pod获取storage的层级

手动创建PV的流程讲解
你完全可以不依赖 StorageClass 或自动创建机制,手动创建 PV 和 PVC,然后让它们绑定起来。
- 第一手动创建实体硬盘,EBS或是EFS等等
- 第二步就是创建PV绑定到实体硬盘
- 第三步就是创建PVC绑定到PV
- 最后一步就是让开发者把Pod绑定到PVC即可

实践手动创建PV
PV1和PV2都是把数据存储到宿主机当中(hostPath), 你也可以手动创建EBS或EFS来和PV做连接,但是需要在k8s集群内安装csi driver
1. 创建PV1
kubectl apply -f pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: manual-pv-1gb
spec:
storageClassName: manual
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data/1gb
2. 创建PV2
kubectl apply -f pv2.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: manual-pv-3gb
spec:
storageClassName: manual
capacity:
storage: 3Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data/2gb
3. 创建好了PV1和PV2之后可以查询
kubectl get pv

4. 创建2GB的PVC , 安装规格来看的话,就会绑定到3GB的PV当中
kubectl apply -f pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: manual-pvc-2gb
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: manual
你会看到3GB的PV status已经Bound, 而且是被manual-pvc-2gb给绑定了

5. 创建pod 然后绑定到PVC
kubectl apply -f pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: app
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- mountPath: "/data"
name: mydata
volumes:
- name: mydata
persistentVolumeClaim:
claimName: manual-pvc-2gb
6. 进入pod当中创建test.txt
【进入pod当中的container】
kubectl exec -it test-pod -c app -- sh
【创建test.txt】
touch /data/test.txt
【退出】
exit
7. 从minikube container当中查询刚刚创建的test.txt

Facebook评论