k8s持久化存储(NFS)
创建一个PersistentVolume
将创建一个NFS PersistentVolume。Kubernetes支持NFS在集群上进行开发和测试。PersistentVolume使用NFS文件系统来连接存储。
以下是nfs持久卷的配置文件:
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
namespace: openeuler
labels:
type: nfs
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
path: "/data"
server: 192.168.26.135
PersistentVolume
定义了StorageClass name manual
,该名称将用于将PersistentVolumeClaim
请求绑定到该PersistentVolume
。
为简单起见,此示例使用ReadWriteOnce访问模式。对于生产使用,Kubernetes项目建议使用ReadWriteOncePod访问模式。accessModes有:
ReadWriteOnce
单个节点可以读写方式挂载该卷。当pod在同一节点上运行时,ReadWriteOnce访问模式仍然可以允许多个pod访问卷。对于单个pod访问,请参见ReadWriteOncePod。
ReadOnlyMany
多节点仅以只读方式挂载该卷。
ReadWriteMany
多节点以读写方式挂载该卷。
ReadWriteOncePod
单个Pod可以读写方式挂载该卷。如果要确保整个群集中只有一个Pod可以读取该PVC或向其写入,请使用ReadWriteOncePod访问模式。
只有CSI卷和Kubernetes版支持ReadWriteOncePod访问模式。要使用此功能,您需要将以下CSI边车更新到这些版本或更高版本:
在CLI中,访问模式缩写为:
- RWO - ReadWriteOnce
- ROX - ReadOnlyMany
- RWX - ReadWriteMany
- RWOP - ReadWriteOncePod
创建PV
kubectl apply -f pv-volume.yaml
显示PV信息
kubectl get pv -n openeuler
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Available manual 6s
创建一个PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
namespace: openeuler
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
创建PVC
kubectl apply -f pv-claim.yaml
再次查看PV
kubectl get pv -n openeuler
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Bound openeuler/task-pv-claim manual 14m
查看PVC
kubectl get pvc -n openeuler
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
task-pv-claim Bound task-pv-volume 10Gi RWO manual 50m
创建一个Pod
下一步是创建一个Pod,它使用PersistentVolumeClaim作为卷。
apiVersion: v1
kind: Pod
metadata:
name: task-pv-pod
namespace: openeuler
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: nginx
volumeMounts:
- mountPath: "/data"
name: task-pv-storage
请注意,Pod的配置文件指定了一个PersistentVolumeClaim,但它没有指定PersistentVolume。从Pod的角度来看,claim是一个volume。
创建Pod
kubectl apply -f pv-pod.yaml
查看挂载信息
kubectl exec -it -n openeuler task-pv-pod -- df -hT | grep data
192.168.26.135:/data nfs4 37G 1.7G 33G 5% /data