建设网站查询,桂林生活网分类信息网站,校园网站开发需求文字,怎样建立自己的个人网站高级存储
PV和PVC
由于kubernetes支持的存储系统有很多#xff0c;要求客户全都掌握#xff0c;显然不现实。为了能够屏蔽底层存储实现的细节#xff0c;方便用户使用#xff0c; kubernetes引入PV和PVC两种资源对象。 PV#xff08;Persistent Volume#xff09; PV是…高级存储
PV和PVC
由于kubernetes支持的存储系统有很多要求客户全都掌握显然不现实。为了能够屏蔽底层存储实现的细节方便用户使用 kubernetes引入PV和PVC两种资源对象。 PVPersistent Volume PV是Kubernetes中的一个API对象它代表集群中的一块存储这块存储已经预先按照某种方式设置好了并且可以被多个用户使用。PV是集群资源由Kubernetes管理员预先配置它们不会因Pod的终止而消失因此被称为“持久化”。PV可以采用多种形式例如本地存储、网络附加存储NAS、云存储服务等。 PVCPersistent Volume Claim PVC是用户对存储的请求它允许用户以声明式的方式请求存储资源而无需关心存储的具体实现细节。用户定义所需的存储容量、访问模式和存储类别如果需要然后提交PVC请求。 PVPersistent Volume PVPersistent Volume在Kubernetes中指的是持久化卷它是一种存储抽象的概念代表了集群中的一块存储这可以是本地磁盘、网络附加存储NAS、或者云存储等。PV与底层存储的具体实现细节相解耦使得Kubernetes管理员可以灵活地管理存储资源。
PV的主要特点包括 独立性PV独立于Pod存在即使使用PV的Pod被删除PV中的数据也不会丢失。 持久性PV在设计上用于数据的持久化存储它们在Kubernetes集群中是长寿命的。 可配置性Kubernetes管理员可以配置PV的大小、访问模式如ReadWriteOnce、ReadOnlyMany、ReadWriteMany以及存储类别StorageClass。 可重用性PV一旦被创建可以被多个Pod重用只要它们的访问模式和存储需求相匹配。 动态供应通过StorageClass资源Kubernetes可以自动创建PV以满足PVC的请求这个过程称为动态存储供应。 PV的生命周期 创建Kubernetes管理员根据集群的存储需求预先创建PV资源。 绑定当用户提交PVCPersistent Volume Claim请求时Kubernetes会尝试找到一个匹配的PV进行绑定。 使用绑定成功后PV可以被Pod通过PVC访问和使用。 回收当PVC被删除时PV可以被释放并根据回收策略进行清理以便再次使用或保持其数据。 PV关键配置参数 存储类型 定义底层实际存储的类型Kubernetes 支持多种存储类型如 NFS、iSCSI、glusterFS 等每种类型的配置都会有所不同。 影响因素不同存储类型可能支持的访问模式和回收策略不同。 存储能力capacity 定义当前主要支持存储空间的设置如 storage1Gi但未来可能会增加 IOPS、吞吐量等其他性能指标的配置。 注意事项存储能力的设置直接影响到 PV 能够提供给 Pod 的存储空间大小。 访问模式accessModes 定义描述用户应用对存储资源的访问权限包括 ReadWriteOnceRWO读写权限但只能被单个节点挂载。 ReadOnlyManyROX只读权限可被多个节点挂载。 ReadWriteManyRWX读写权限可被多个节点挂载。 注意事项底层不同的存储类型可能支持的访问模式不同。 回收策略persistentVolumeReclaimPolicy 定义当 PV 不再被使用时对其的处理方式包括 Retain保留保留数据需管理员手动清理。 Recycle回收清除 PV 中的数据。 Delete删除与 PV 相关联的后端存储完成 volume 删除操作。 注意事项底层不同的存储类型可能支持的回收策略不同。 存储类别storageClassName 定义通过 storageClassName 参数指定一个存储类别有助于管理和组织不同类型的存储资源。 绑定规则具有特定类别的 PV 只能与请求了该类别的 Persistent Volume Claim (PVC) 进行绑定未设定类别的 PV 则只能与不请求任何类别的 PVC 进行绑定。 状态status 定义PV 在生命周期中的状态包括 Available可用表示可用状态尚未被任何 PVC 绑定。 Bound已绑定表示 PV 已经被 PVC 绑定。 Released已释放表示 PVC 被删除但资源还未被集群重新声明。 Failed失败表示该 PV 的自动回收失败。
示例 使用NFS作为存储来演示PV的使用创建3个PV对应NFS中的3个暴露的路径
[rootk8s-master ~]# mkdir /data/pv{1..3} -p
[rootk8s-master ~]# vim /etc/exports、
[rootk8s-master ~]# cat /etc/exports
/nfstest 192.168.58.0/24(rw,no_root_squash)
/data/pv1 192.168.58.0/24(rw,no_root_squash)
/data/pv2 192.168.58.0/24(rw,no_root_squash)
/data/pv3 192.168.58.0/24(rw,no_root_squash)
[rootk8s-master ~]# exportfs -arv
exporting 192.168.58.0/24:/data/pv3
exporting 192.168.58.0/24:/data/pv2
exporting 192.168.58.0/24:/data/pv1
exporting 192.168.58.0/24:/nfstest创建pv配置文件
[rootk8s-master ~]# cat pv.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv1
spec:capacity:storage: 1GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/pv1server: k8s-master---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv2
spec:capacity:storage: 2GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/pv2server: k8s-master---
apiVersion: v1
kind: PersistentVolume
metadata:name: pv3
spec:capacity:storage: 3GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /data/pv3server: k8s-master
[rootk8s-master ~]# kubectl apply -f pv.yaml
persistentvolume/pv1 created
persistentvolume/pv2 created
persistentvolume/pv3 created
[rootk8s-master ~]# kubectl get pv -w
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWX Retain Available 14s
pv2 2Gi RWX Retain Available 14s
pv3 3Gi RWX Retain Available 14s当前PV的状态为available为可用状态
PVCPersistent Volume Claim
PVC 的关键配置参数 访问模式accessModes 定义描述用户应用对存储资源的访问权限。 可选值 ReadWriteOnce表示该卷可以被集群中的一个节点挂载为读写模式。 ReadOnlyMany表示该卷可以被集群中的多个节点挂载为只读模式。 ReadWriteMany表示该卷可以被集群中的多个节点同时挂载为读写模式。 注意事项不同的存储类型可能支持的访问模式不同。 选择条件selector 定义通过 Label Selector 的设置使 PVC 对系统中已存在的 PV 进行筛选。 作用允许 PVC 根据标签选择特定的 PV从而实现更灵活的存储资源管理。 示例matchLabels: { app: myapp } 表示 PVC 会尝试绑定标签为 { app: myapp } 的 PV。 存储类别storageClassName 定义PVC 在定义时可以设定需要的后端存储的类别。 作用只有设置了相同 storageClassName 的 PV 才能被系统选出作为 PVC 的目标。 示例storageClassName: standard 表示 PVC 要求使用名为 standard 的存储类别。 资源请求Resources 定义PVC 中的资源请求字段用于指定 PVC 需要的最小存储空间大小。 示例resources.requests.storage: 5Gi 表示 PVC 请求至少需要 5GB 的存储空间。 注意事项PVC 的资源请求必须小于或等于 PV 提供的最大存储空间否则 PVC 无法成功绑定到 PV 上。
[rootk8s-master ~]# cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc1namespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc2namespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc3namespace: test
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Mi[rootk8s-master ~]# kubectl create ns test
namespace/test created
[rootk8s-master ~]# kubectl apply -f pvc.yaml
persistentvolumeclaim/pvc1 created
persistentvolumeclaim/pvc2 created
persistentvolumeclaim/pvc3 created
[rootk8s-master ~]# kubectl get pvc -w
^C[rootk8s-master ~]# kubectl get pvc -n test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc1 Bound pv1 1Gi RWX 18s
pvc2 Bound pv2 2Gi RWX 18s
pvc3 Bound pv3 3Gi RWX 18s
[rootk8s-master ~]# kubectl get pv -o wide
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE
pv1 1Gi RWX Retain Bound test/pvc1 2m55s Filesystem
pv2 2Gi RWX Retain Bound test/pvc2 2m55s Filesystem
pv3 3Gi RWX Retain Bound test/pvc3 2m55s Filesystem创建PVC之后PV的状态变为已绑定 创建pods.yaml, 使用pv
[rootk8s-master ~]# cat pods.yaml
---
apiVersion: v1
kind: Pod
metadata:name: pod1namespace: test
spec:containers:- name: busyboximage: busybox:1.30command: [/bin/sh, -c, while true; do echo pod1 /root/out.txt; sleep 10; done;]volumeMounts:- name: volumemountPath: /root/volumes:- name: volumepersistentVolumeClaim:claimName: pvc1readOnly: false---
apiVersion: v1
kind: Pod
metadata:name: pod2namespace: test
spec:containers:- name: busyboximage: busybox:1.30command: [/bin/sh, -c, while true; do echo pod2 /root/out.txt; sleep 10; done;]volumeMounts:- name: volumemountPath: /root/volumes:- name: volumepersistentVolumeClaim:claimName: pvc2readOnly: false
[rootk8s-master ~]# kubectl apply -f pods.yaml
pod/pod1 created
pod/pod2 created
[rootk8s-master ~]# kubectl get pods -n test
NAME READY STATUS RESTARTS AGE
pod1 0/1 ContainerCreating 0 6s
pod2 0/1 ContainerCreating 0 6s
[rootk8s-master ~]# kubectl get pods -n test -w
NAME READY STATUS RESTARTS AGE
pod1 0/1 ContainerCreating 0 9s
pod2 0/1 ContainerCreating 0 9s
pod1 1/1 Running 0 9s
pod2 1/1 Running 0 10s
^C[rootk8s-master ~]# kubectl get pods -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod1 1/1 Running 0 20s 10.244.169.129 k8s-node2 none none
pod2 1/1 Running 0 20s 10.244.36.74 k8s-node1 none nonewhile true; do echo pod1 /root/out.txt; sleep 10; done;while循环每十秒输出pod1到/root/out.txt中
[rootk8s-master ~]# cat /data/pv1/out.txt
pod1
pod1
[rootk8s-master ~]# cat /data/pv2/out.txt
pod2
pod2
pod2
[rootk8s-master ~]# cat /data/pv1/out.txt
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1
pod1