本地存储介绍¶
在8.1.1章节中的PV YAML示例,就是本地存储。本地存储类型的PV是Kubernetes中一种比较特殊的持久化存储,它允许将节点上的本地磁盘或目录用作PV。与其他PV类型(例如NFS、Ceph或云存储)不同,本地存储类型的PV直接使用节点上的存储资源,因此具有更低的延迟和更高的性能。
使用本地存储类型的PV时,需注意以下几个关键点:
1、节点特性:本地存储类型的PV与特定的节点绑定,因为它直接使用节点上的存储资源。这意味着当创建PV时,需要指定与之关联的节点。可以在PV的spec部分设置nodeAffinity来实现的。
nodeAffinity: ##定义节点亲和性
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node-name
2、数据持久性:由于本地存储类型的PV与特定节点关联,当该节点发生故障时,存储在PV中的数据可能无法访问。因此,在使用本地存储类型的PV时,请确保采取适当的数据备份策略,以防止节点故障导致的数据丢失。
3、调度限制:Pod使用本地存储类型的Persistent Volume Claim(PVC)时,Kubernetes会尝试将Pod调度到关联PV的节点上。如果节点上的资源不足以运行Pod,Pod将无法启动。因此,在使用本地存储类型的PV时,请确保关联的节点有足够的资源来运行Pod。
4、回收策略:当PVC被删除时,PV的回收策略将决定如何处理关联的本地存储。对于本地存储类型的PV,建议使用Retain或Delete回收策略。Retain策略表示保留存储和数据,以便手动清理和管理;Delete策略表示删除存储和数据。需要注意的是,Recycle策略并不适用于本地存储类型的PV。
persistentVolumeReclaimPolicy: Retain
本地存储示例¶
1、在k8s-master02节点上创建一个本地目录/mnt/local-storage
$ mkdir -p /mnt/local-storage
2、创建一个PV资源配置文件,例如local-pv.yaml
$ vi local-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /mnt/local-storage
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname #这是内置的节点标签,表示节点的主机名
operator: In
values:
- k8s-master02 #只有k8s-master02这个主机节点才满足要求
3、应用PV资源配置文件
$ k apply -f local-pv.yaml
4、再创建一个PVC资源配置文件,例如local-pvc.yaml
$ vi local-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
5、应用PVC资源配置文件,Kubernetes会自动将PVC与PV绑定。创建好的PVC可以在Pod中使用,将本地存储挂载到容器中。
$ k apply -f local-pvc.yaml
6、创建一个Pod资源配置文件,例如local-pod.yaml
$ vi local-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: local-pod
spec:
containers:
- name: local-container
image: nginx:1.21.6
volumeMounts:
- name: local-storage
mountPath: /data
volumes:
- name: local-storage
persistentVolumeClaim:
claimName: local-pvc
7、应用Pod资源配置文件
$ k apply -f local-pod.yaml
查看pod部署节点,观察到部署在k8s-master02节点上
$ k get po local-pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
local-pod 1/1 Running 0 20s 172.25.92.80 k8s-master02 <none> <none>
8、测试
在k8s-master02节点上的/mnt/local-storage目录下创建文件111.txt
$ cd /mnt/local-storage/
$ touch 111.txt
$ echo "xasdasdads" > 111.txt
在k8s-master01节点上查看111.txt文件内容
$ k exec -it local-pod
$ cat data/111.txt
xasdasdads
9、恢复
$ k delete -f local-pod.yaml,local-pvc.yaml,local-pv.yaml