本地数据卷(Local Volume)代表一个本地存储设备,比如磁盘、分区或者目录等。主要的应用场景包括分布式存储和数据库等需要高性能和高可靠性的环境里。本地数据卷同时支持块设备和文件系统,通过 spec.local.path 指定;但对于文件系统来说,kubernetes 并不会限制该目录可以使用的存储空间大小。本地数据卷只能以静态创建的PV使用。相对于HostPath,本地数据卷可以直接以持久化的方式使用(它总是通过NodeAffinity调度在某个指定的节点上)。
1、创建一个PV和该PV的StorageClass
[root@k8s-master ~]# vim localvolume.yaml
添加:
apiVersion: v1
kind: PersistentVolume
metadata:
? name: my-local-pv
spec:
? capacity:
??? storage: 5Gi
? accessModes:
? - ReadWriteOnce
? persistentVolumeReclaimPolicy: Retain
? volumeMode: Filesystem
? storageClassName: my-local-pv
? local:
??? path: /storage/xixi
? nodeAffinity:
??? required:
????? nodeSelectorTerms:
????? - matchExpressions:
??????? - key: kubernetes.io/hostname
????????? operator: In
????????? values:
????????? - k8s-node-1
????????? - k8s-node-2
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
? name: my-local-pv
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
注意:设置nodeAffinity是用来限制该本地卷仅在k8s-node-1或k8s-node-2中可用。
[root@k8s-master ~]# kubectl apply -f localvolume.yaml
[root@k8s-master ~]# kubectl get pv
2、创建文件系统
在Node节点中创建文件系统,这里使用的是本地文件系统,可以使用Block来使用原始磁盘。
[root@k8s-node-1 ~]# mkdir /storage/xixi
[root@k8s-node-2 ~]# mkdir /storage/xixi
3、创建PVC
[root@k8s-master ~]# vim pvc-local-test.yaml
添加:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
? name: pvc-local-test
spec:
? accessModes:
??? - ReadWriteOnce
? storageClassName: my-local-pv
? resources:
??? requests:
????? storage: 2Gi
[root@k8s-master ~]# kubectl apply -f pvc-local-test.yaml
[root@k8s-master ~]# kubectl get pvc
注意: STATUS:Pending,等创建好下面的deployment后,STATUS才会改变。
[root@k8s-master ~]# kubectl apply -f deployment.yaml
[root@k8s-master ~]# kubectl get pvc
[root@k8s-master ~]# kubectl apply -f deployment.yaml
[root@k8s-master ~]# kubectl get pod -o wide
4、测试
[root@k8s-master ~]# kubectl exec -it nginx-75b45fd4f4-ctzv8 -- sh
在节点上查看