领路话说邃晓K8S的领路PV / PVC / StorageClass(表面+施行)
故故者:不躁急的顺次员 云预备 云原生 PV、PVC是话说K8S用来做存储解决的资源目的,它们让存储资源的邃晓施行manbetx体育骗捏变得可控,从而保障编制的表面静止性、靠得住性。领路StorageClass则是话说为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。邃晓施行本文转载自微信群众号「 不躁急的表面顺次员」,转载本文请说合AI源起群众号。领路
先来个一句话概括:PV、话说PVC是邃晓施行K8S用来做存储解决的资源目的,它们让存储资源的表面骗捏变得可控,从而保障编制的领路静止性、靠得住性。话说StorageClass则是邃晓施行为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。
一、表面
1、PV概记挂
PV是对K8S存储资源的笼统,PV闲居由运维职工设立和配阁阁,供容器请求骗捏。manbetx体育
莫得PV曾经,服务器的磁盘莫得分区的概记挂,有了PV之后,额外于通过PV对服务器的磁盘进行分区。
2、PVC概记挂
PVC 是Pod对存储资源的一个请求,症结蕴涵存储空间请求、造访模式等。设立PV后,Pod就能够通过PVC向PV请求磁盘空间了。访佛于某个运用顺次向独霸编制的D盘请求1G的骗捏空间。
PVC 设立获胜之后,Pod 就能够以存储卷(Volume)的花式骗捏 PVC 的存储资源了。Pod 在骗捏 PVC 时必须与PVC在统一个Namespace下。
3、PV / PVC的说合
PV额外于对磁盘的分区,PVC额外于APP(运用顺次)向某个分区请求多少空间。譬喻说装阁阁WPS顺次时,闲居谋面知我们装阁阁它须要多少存储空间,让你采纳在某个磁盘下装阁阁。要是未来某个分区磁盘饱读了,也不会训诲此外分区磁盘的骗捏。
一朝 PV 与PVC绑定,Pod就能够骗捏这个 PVC 了。要是在编制中莫得餍饱读 PVC 请求的 PV,PVC则根本处于 Pending 状态,直到编制里生长了一个适当的 PV。
4、StorageClass概记挂
K8S有两种存储资源的提供模式:静态模式和动静模式,资源提供的终竟目的就是将适当的PV与PVC绑定:
- 静态模式:解决员预先设立许多种种种种的PV,等待PVC请求骗捏。
- 动静模式:解决员毋庸预先设立PV,而是通过StorageClass自愿结束PV的设立以及与PVC的绑定。
StorageClass就是动静模式,遵照PVC的须要动静设立适当的PV资源,从而落成有储卷的按需设立。
闲居某个贸易性的运用顺次,会用到豪爽的Pod,要是每个Pod都须要骗捏存储资源,那么就须要人造时通常的去设立PV,这亦然个麻烦事儿。解阁阁设施就是骗捏动静模式:当Pod通过PVC请求存储资源时,直接通过StorageClass去动静的设立对应大小的PV,而后与PVC绑定,是以根蒂上PV → PVC是一对一的说合。
5、Provisioner概记挂
在设立 PVC 时须要指定 StorageClass,PVC 采纳到对应的StorageClass后,与其联系的 Provisioner 组件来动静设立 PV 资源。
那Provisioner是个啥呢?素来就一个存储驱动,访佛独霸编制里的磁盘驱动。
StorageClass 资源目目的界说症结蕴涵:称谓、Provisioner、存储的相故故参数配阁阁、回笼计谋。StorageClass一朝被设立,则无法编削,只能苟简重新设立。
PV和PVC的生命周期,蕴涵4个阶段:资源提供(Provisioning)、资源绑定(Binding)、资源骗捏(Using)、资源回笼(Reclaiming)。首先旧的有资源提供,说白了就是得有存储驱动,而后能力设立、绑定和骗捏、回笼。
6、骗捏PV / PVC前后比较
6.1、通过描述比较
在莫得骗捏PV、PVC曾经,各个Pod都能够顺手的向存储资源里(譬喻NFS)写数据,顺手一个Pod都能够往磁盘上插一杠子,长远下去磁盘的解决会越来越错杂,而后招致数据骗捏超限,磁盘爆遗失,终末招致磁盘上的集体运用险些挂遗失。
为领略决这个题目,引入了PV、PVC的概记挂,达到限度Pod写入存储数据大小的目的,从而更好地保障了编制的可用性、静止性。
有了PVC、PV之后,集体Pod骗捏存储资源,维持一个轨则:先阴谋 → 后请求 → 再骗捏。
那你肯定有一个疑难,“StorageClass是自愿化设立PV,跟素来的无序不行控是雷同的服从啊,都能够顺手占用存储资源啊”。
素来否则,骗捏StorageClass只是自愿化了设立PV的进程,但连续践诺的是一个存储可控的进程。每个Pod骗捏多少存储空间是固定的,Pod莫得目的逾额骗捏存储空间,更不会训诲到此外运用,要出阻难也只是某个Pod自身出阻难。
6.2、通过图片比较
莫得骗捏PV、PVC曾经的状态,如底下2张图:
有了PV、PVC之后的状态,如下图:
二、施行
在施行PV、PVC、StorageClass曾经,须要读者诤友自行装阁阁NFS服务器。文中示范的本色是通过yaml编排自愿到NFS服务器起上设立PV。
1、Pod骗捏PV、PVC挂载存储卷
1.1、编排PV、PVC、Pod挂载PVC
文中示范的是:Pod的某个目次挂载到NFS的某个目次下。骗捏了nginx镜像,将html文献写在PV方位的NFS服务器上,终竟能够顾念记挂到簸弄PV / PVC 获胜挂载上去了。
yaml文献如下:
# PV编排apiVersion: v1kind: PersistentVolumemetadata: name: nfs-pv1 namespace: dev1 labels: pv: nfs-pv1spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce # Recycle 苟简PVC会同步苟简PV | Retain 苟简PVC不会同步苟简PV persistentVolumeReclaimPolicy: Recycle nfs: path: /data/nfstest/share/pv1 server: 10.20.1.20 readOnly: false---# PVC 编排,通过selector查找PV,K8S里的资源查找都是通过selector查找label标签apiVersion: v1kind: PersistentVolumeClaimmetadata: name: nfs-pvc1 namespace: dev1 labels: pv: nfs-pvc1spec: resources: requests: storage: 100Mi accessModes: - ReadWriteOnce selector: matchLabels: pv: nfs-pv1---# Pod挂载PVC,这里为了视察,直接通过node节点的hostPort透露服务apiVersion: v1kind: Podmetadata: name: webapp namespace: dev1 labels: app: webappspec: containers: - name: webapp image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 8081 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html volumes: - name: workdir persistentVolumeClaim: claimName: nfs-pvc1
践诺kubectl夂箢,稽查施行服从如下:
而后稽查pod的状态,露出pod根本处于设立中,如下:
因而稽查pod的状态kubectl describe pod webapp -n dev1,露出如下相等音问:
是鉴于莫得在NFS上设立此文献夹。到NFS设立此文献夹之后,重启Pod,齐备正常了,而后找到Pod方位Node节点。通过http://nodeip:port造访,能够顾念记挂到获胜的界面:
[root@k8s-master pv-pvc-storageclass]# kubectl get pods -n dev1 -owide | grep webappwebapp 1/1 Running 0 4m17s 10.21.69.214 k8s-worker-3
此时鉴于nginx下还莫得html页面,是以顾念记挂不到本色。此时到NFS服务器对应的目次/data/nfstest/share/pv1下施行index.html页面,而后考订页面即可,界面如下:
也能够通过长入到Pod里面,稽追查证是够挂载获胜。
践诺长入Pod的夂箢kubectl exec -it webapp -n dev1 -- /bin/sh,能够顾念记挂到如下页面:
2、Pod骗捏StorageClass自愿挂载存储卷
2.1、装阁阁 Provisioner
文当采纳通过helm的花式装阁阁nfs-subdir-external-provisioner,这种花式相对轻省。装阁阁文档、装阁阁进程见下文:
- 装阁阁文档:
https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/#nfs
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
- 装阁阁进程:
通过以下3个症结结束nfs-subdir-external-provisioner的装阁阁。
- 装阁阁helm,本文以mac为例
brew install heml
- 装阁阁nfs-subdir-external-provisioner,践诺以下2个夂箢:
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -n kube-system \ --set image.repository=dyrnq/nfs-subdir-external-provisioner \ --set nfs.server=10.20.1.20 \ --set nfs.path=/data/nfstest/nfs-storage
这里瞩目几个参数:
image.repository:编削了镜像的所在,默许用的国际镜像很有能够拉不下来
nfs.server:你的NFS服务器所在
nfs.path:存储目次
- 稽查helm装阁阁的结果:
践诺夂箢:helm list -A,稽查helm装阁阁结果:
稽查是否设立了对应的pod,要是莫得编削镜像所在会根本拉捏阻难,如下图:
编削镜像所在后获胜滥觞Pod,如下图:
2.2、骗捏StorageClass
文中示范的是:Pod簸弄StorageClass自愿设立PV,同期在对应的存储目次上设立了文献,写入了数据。
yaml文献如下:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: nfs-storage-1provisioner: cluster.local/nfs-subdir-external-provisionerparameters: # 配阁阁为"false"时苟简PVC不会维持数据,"true"则维持数据 archiveOnDelete: "false"mountOptions: # 指定NFS版本,这个须要遵照NFS Server版本号配阁阁 - nfsvers=4---# 设立PVCkind: PersistentVolumeClaimapiVersion: v1metadata: name: nfs-storage-pvc-1 namespace: dev1spec: storageClassName: nfs-storage-1 #须要与上面设立的storageclass的称谓雷同 accessModes: - ReadWriteOnce resources: requests: storage: 10Mi---kind: PodapiVersion: v1metadata: name: nfs-storage-pod-1 namespace: dev1spec: containers: - name: nfs-storage-pod-1 image: busybox command: - "/bin/sh" args: - "-c" - "touch /mnt/teststorage && echo 111 > /mnt/teststorage && exit 0 || exit 1" ## 设立一个称谓为"SUCCESS"的文献 volumeMounts: - name: nfs-pvc mountPath: "/mnt" restartPolicy: "Never" volumes: - name: nfs-pvc persistentVolumeClaim: claimName: nfs-storage-pvc-1
践诺kubectl夂箢后,能够顾念记挂到如下服从:
图片
图片
能够顾念记挂到如我们预测的那样,通过storageClass自愿设立了PV,同期在NFS对应的存储目次上设立了文献,写入了数据。
至此,我们施行进程险些遣散。
三、概括
本文症结道解了PV、PVC、StorageClass的表面和实战。
一句话概括:PV、PVC是K8S用来做存储解决的资源目的,它们让存储资源的骗捏变得可控,从而保障编制的静止性、靠得住性。StorageClass则是为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。
参考文献:《Kubernetes权威指南》
责任编辑:武晓燕 源泉: 不躁急的顺次员 PVPVC存储清洗小米电视遥控板多少钱
领路话说邃晓K8S的领路PV / PVC / StorageClass(表面+施行)
故故者:不躁急的顺次员 云预备 云原生 PV、PVC是话说K8S用来做存储解决的资源目的,它们让存储资源的邃晓施行manbetx体育骗捏变得可控,从而保障编制的表面静止性、靠得住性。领路StorageClass则是话说为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。邃晓施行本文转载自微信群众号「 不躁急的表面顺次员」,转载本文请说合AI源起群众号。领路
先来个一句话概括:PV、话说PVC是邃晓施行K8S用来做存储解决的资源目的,它们让存储资源的表面骗捏变得可控,从而保障编制的领路静止性、靠得住性。话说StorageClass则是邃晓施行为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。
一、表面
1、PV概记挂
PV是对K8S存储资源的笼统,PV闲居由运维职工设立和配阁阁,供容器请求骗捏。manbetx体育
莫得PV曾经,服务器的磁盘莫得分区的概记挂,有了PV之后,额外于通过PV对服务器的磁盘进行分区。
2、PVC概记挂
PVC 是Pod对存储资源的一个请求,症结蕴涵存储空间请求、造访模式等。设立PV后,Pod就能够通过PVC向PV请求磁盘空间了。访佛于某个运用顺次向独霸编制的D盘请求1G的骗捏空间。
PVC 设立获胜之后,Pod 就能够以存储卷(Volume)的花式骗捏 PVC 的存储资源了。Pod 在骗捏 PVC 时必须与PVC在统一个Namespace下。
3、PV / PVC的说合
PV额外于对磁盘的分区,PVC额外于APP(运用顺次)向某个分区请求多少空间。譬喻说装阁阁WPS顺次时,闲居谋面知我们装阁阁它须要多少存储空间,让你采纳在某个磁盘下装阁阁。要是未来某个分区磁盘饱读了,也不会训诲此外分区磁盘的骗捏。
一朝 PV 与PVC绑定,Pod就能够骗捏这个 PVC 了。要是在编制中莫得餍饱读 PVC 请求的 PV,PVC则根本处于 Pending 状态,直到编制里生长了一个适当的 PV。
4、StorageClass概记挂
K8S有两种存储资源的提供模式:静态模式和动静模式,资源提供的终竟目的就是将适当的PV与PVC绑定:
- 静态模式:解决员预先设立许多种种种种的PV,等待PVC请求骗捏。
- 动静模式:解决员毋庸预先设立PV,而是通过StorageClass自愿结束PV的设立以及与PVC的绑定。
StorageClass就是动静模式,遵照PVC的须要动静设立适当的PV资源,从而落成有储卷的按需设立。
闲居某个贸易性的运用顺次,会用到豪爽的Pod,要是每个Pod都须要骗捏存储资源,那么就须要人造时通常的去设立PV,这亦然个麻烦事儿。解阁阁设施就是骗捏动静模式:当Pod通过PVC请求存储资源时,直接通过StorageClass去动静的设立对应大小的PV,而后与PVC绑定,是以根蒂上PV → PVC是一对一的说合。
5、Provisioner概记挂
在设立 PVC 时须要指定 StorageClass,PVC 采纳到对应的StorageClass后,与其联系的 Provisioner 组件来动静设立 PV 资源。
那Provisioner是个啥呢?素来就一个存储驱动,访佛独霸编制里的磁盘驱动。
StorageClass 资源目目的界说症结蕴涵:称谓、Provisioner、存储的相故故参数配阁阁、回笼计谋。StorageClass一朝被设立,则无法编削,只能苟简重新设立。
PV和PVC的生命周期,蕴涵4个阶段:资源提供(Provisioning)、资源绑定(Binding)、资源骗捏(Using)、资源回笼(Reclaiming)。首先旧的有资源提供,说白了就是得有存储驱动,而后能力设立、绑定和骗捏、回笼。
6、骗捏PV / PVC前后比较
6.1、通过描述比较
在莫得骗捏PV、PVC曾经,各个Pod都能够顺手的向存储资源里(譬喻NFS)写数据,顺手一个Pod都能够往磁盘上插一杠子,长远下去磁盘的解决会越来越错杂,而后招致数据骗捏超限,磁盘爆遗失,终末招致磁盘上的集体运用险些挂遗失。
为领略决这个题目,引入了PV、PVC的概记挂,达到限度Pod写入存储数据大小的目的,从而更好地保障了编制的可用性、静止性。
有了PVC、PV之后,集体Pod骗捏存储资源,维持一个轨则:先阴谋 → 后请求 → 再骗捏。
那你肯定有一个疑难,“StorageClass是自愿化设立PV,跟素来的无序不行控是雷同的服从啊,都能够顺手占用存储资源啊”。
素来否则,骗捏StorageClass只是自愿化了设立PV的进程,但连续践诺的是一个存储可控的进程。每个Pod骗捏多少存储空间是固定的,Pod莫得目的逾额骗捏存储空间,更不会训诲到此外运用,要出阻难也只是某个Pod自身出阻难。
6.2、通过图片比较
莫得骗捏PV、PVC曾经的状态,如底下2张图:
有了PV、PVC之后的状态,如下图:
二、施行
在施行PV、PVC、StorageClass曾经,须要读者诤友自行装阁阁NFS服务器。文中示范的本色是通过yaml编排自愿到NFS服务器起上设立PV。
1、Pod骗捏PV、PVC挂载存储卷
1.1、编排PV、PVC、Pod挂载PVC
文中示范的是:Pod的某个目次挂载到NFS的某个目次下。骗捏了nginx镜像,将html文献写在PV方位的NFS服务器上,终竟能够顾念记挂到簸弄PV / PVC 获胜挂载上去了。
yaml文献如下:
# PV编排apiVersion: v1kind: PersistentVolumemetadata: name: nfs-pv1 namespace: dev1 labels: pv: nfs-pv1spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce # Recycle 苟简PVC会同步苟简PV | Retain 苟简PVC不会同步苟简PV persistentVolumeReclaimPolicy: Recycle nfs: path: /data/nfstest/share/pv1 server: 10.20.1.20 readOnly: false---# PVC 编排,通过selector查找PV,K8S里的资源查找都是通过selector查找label标签apiVersion: v1kind: PersistentVolumeClaimmetadata: name: nfs-pvc1 namespace: dev1 labels: pv: nfs-pvc1spec: resources: requests: storage: 100Mi accessModes: - ReadWriteOnce selector: matchLabels: pv: nfs-pv1---# Pod挂载PVC,这里为了视察,直接通过node节点的hostPort透露服务apiVersion: v1kind: Podmetadata: name: webapp namespace: dev1 labels: app: webappspec: containers: - name: webapp image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 8081 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html volumes: - name: workdir persistentVolumeClaim: claimName: nfs-pvc1
践诺kubectl夂箢,稽查施行服从如下:
而后稽查pod的状态,露出pod根本处于设立中,如下:
因而稽查pod的状态kubectl describe pod webapp -n dev1,露出如下相等音问:
是鉴于莫得在NFS上设立此文献夹。到NFS设立此文献夹之后,重启Pod,齐备正常了,而后找到Pod方位Node节点。通过http://nodeip:port造访,能够顾念记挂到获胜的界面:
[root@k8s-master pv-pvc-storageclass]# kubectl get pods -n dev1 -owide | grep webappwebapp 1/1 Running 0 4m17s 10.21.69.214 k8s-worker-3
此时鉴于nginx下还莫得html页面,是以顾念记挂不到本色。此时到NFS服务器对应的目次/data/nfstest/share/pv1下施行index.html页面,而后考订页面即可,界面如下:
也能够通过长入到Pod里面,稽追查证是够挂载获胜。
践诺长入Pod的夂箢kubectl exec -it webapp -n dev1 -- /bin/sh,能够顾念记挂到如下页面:
2、Pod骗捏StorageClass自愿挂载存储卷
2.1、装阁阁 Provisioner
文当采纳通过helm的花式装阁阁nfs-subdir-external-provisioner,这种花式相对轻省。装阁阁文档、装阁阁进程见下文:
- 装阁阁文档:
https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/#nfs
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
- 装阁阁进程:
通过以下3个症结结束nfs-subdir-external-provisioner的装阁阁。
- 装阁阁helm,本文以mac为例
brew install heml
- 装阁阁nfs-subdir-external-provisioner,践诺以下2个夂箢:
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -n kube-system \ --set image.repository=dyrnq/nfs-subdir-external-provisioner \ --set nfs.server=10.20.1.20 \ --set nfs.path=/data/nfstest/nfs-storage
这里瞩目几个参数:
image.repository:编削了镜像的所在,默许用的国际镜像很有能够拉不下来
nfs.server:你的NFS服务器所在
nfs.path:存储目次
- 稽查helm装阁阁的结果:
践诺夂箢:helm list -A,稽查helm装阁阁结果:
稽查是否设立了对应的pod,要是莫得编削镜像所在会根本拉捏阻难,如下图:
编削镜像所在后获胜滥觞Pod,如下图:
2.2、骗捏StorageClass
文中示范的是:Pod簸弄StorageClass自愿设立PV,同期在对应的存储目次上设立了文献,写入了数据。
yaml文献如下:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: nfs-storage-1provisioner: cluster.local/nfs-subdir-external-provisionerparameters: # 配阁阁为"false"时苟简PVC不会维持数据,"true"则维持数据 archiveOnDelete: "false"mountOptions: # 指定NFS版本,这个须要遵照NFS Server版本号配阁阁 - nfsvers=4---# 设立PVCkind: PersistentVolumeClaimapiVersion: v1metadata: name: nfs-storage-pvc-1 namespace: dev1spec: storageClassName: nfs-storage-1 #须要与上面设立的storageclass的称谓雷同 accessModes: - ReadWriteOnce resources: requests: storage: 10Mi---kind: PodapiVersion: v1metadata: name: nfs-storage-pod-1 namespace: dev1spec: containers: - name: nfs-storage-pod-1 image: busybox command: - "/bin/sh" args: - "-c" - "touch /mnt/teststorage && echo 111 > /mnt/teststorage && exit 0 || exit 1" ## 设立一个称谓为"SUCCESS"的文献 volumeMounts: - name: nfs-pvc mountPath: "/mnt" restartPolicy: "Never" volumes: - name: nfs-pvc persistentVolumeClaim: claimName: nfs-storage-pvc-1
践诺kubectl夂箢后,能够顾念记挂到如下服从:
图片
图片
能够顾念记挂到如我们预测的那样,通过storageClass自愿设立了PV,同期在NFS对应的存储目次上设立了文献,写入了数据。
至此,我们施行进程险些遣散。
三、概括
本文症结道解了PV、PVC、StorageClass的表面和实战。
一句话概括:PV、PVC是K8S用来做存储解决的资源目的,它们让存储资源的骗捏变得可控,从而保障编制的静止性、靠得住性。StorageClass则是为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。
参考文献:《Kubernetes权威指南》
责任编辑:武晓燕 源泉: 不躁急的顺次员 PVPVC存储2023年9月23日全氟壬烯氧基苯磺酸钠(OBS)价格最新行情预测
C++11中auto关键字的使用详解
2023年9月23日山东省全氟壬烯氧基苯磺酸钠(OBS)价格最新行情预测
领路话说邃晓K8S的领路PV / PVC / StorageClass(表面+施行)
故故者:不躁急的顺次员 云预备 云原生 PV、PVC是话说K8S用来做存储解决的资源目的,它们让存储资源的邃晓施行manbetx体育骗捏变得可控,从而保障编制的表面静止性、靠得住性。领路StorageClass则是话说为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。邃晓施行本文转载自微信群众号「 不躁急的表面顺次员」,转载本文请说合AI源起群众号。领路
先来个一句话概括:PV、话说PVC是邃晓施行K8S用来做存储解决的资源目的,它们让存储资源的表面骗捏变得可控,从而保障编制的领路静止性、靠得住性。话说StorageClass则是邃晓施行为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。
一、表面
1、PV概记挂
PV是对K8S存储资源的笼统,PV闲居由运维职工设立和配阁阁,供容器请求骗捏。manbetx体育
莫得PV曾经,服务器的磁盘莫得分区的概记挂,有了PV之后,额外于通过PV对服务器的磁盘进行分区。
2、PVC概记挂
PVC 是Pod对存储资源的一个请求,症结蕴涵存储空间请求、造访模式等。设立PV后,Pod就能够通过PVC向PV请求磁盘空间了。访佛于某个运用顺次向独霸编制的D盘请求1G的骗捏空间。
PVC 设立获胜之后,Pod 就能够以存储卷(Volume)的花式骗捏 PVC 的存储资源了。Pod 在骗捏 PVC 时必须与PVC在统一个Namespace下。
3、PV / PVC的说合
PV额外于对磁盘的分区,PVC额外于APP(运用顺次)向某个分区请求多少空间。譬喻说装阁阁WPS顺次时,闲居谋面知我们装阁阁它须要多少存储空间,让你采纳在某个磁盘下装阁阁。要是未来某个分区磁盘饱读了,也不会训诲此外分区磁盘的骗捏。
一朝 PV 与PVC绑定,Pod就能够骗捏这个 PVC 了。要是在编制中莫得餍饱读 PVC 请求的 PV,PVC则根本处于 Pending 状态,直到编制里生长了一个适当的 PV。
4、StorageClass概记挂
K8S有两种存储资源的提供模式:静态模式和动静模式,资源提供的终竟目的就是将适当的PV与PVC绑定:
- 静态模式:解决员预先设立许多种种种种的PV,等待PVC请求骗捏。
- 动静模式:解决员毋庸预先设立PV,而是通过StorageClass自愿结束PV的设立以及与PVC的绑定。
StorageClass就是动静模式,遵照PVC的须要动静设立适当的PV资源,从而落成有储卷的按需设立。
闲居某个贸易性的运用顺次,会用到豪爽的Pod,要是每个Pod都须要骗捏存储资源,那么就须要人造时通常的去设立PV,这亦然个麻烦事儿。解阁阁设施就是骗捏动静模式:当Pod通过PVC请求存储资源时,直接通过StorageClass去动静的设立对应大小的PV,而后与PVC绑定,是以根蒂上PV → PVC是一对一的说合。
5、Provisioner概记挂
在设立 PVC 时须要指定 StorageClass,PVC 采纳到对应的StorageClass后,与其联系的 Provisioner 组件来动静设立 PV 资源。
那Provisioner是个啥呢?素来就一个存储驱动,访佛独霸编制里的磁盘驱动。
StorageClass 资源目目的界说症结蕴涵:称谓、Provisioner、存储的相故故参数配阁阁、回笼计谋。StorageClass一朝被设立,则无法编削,只能苟简重新设立。
PV和PVC的生命周期,蕴涵4个阶段:资源提供(Provisioning)、资源绑定(Binding)、资源骗捏(Using)、资源回笼(Reclaiming)。首先旧的有资源提供,说白了就是得有存储驱动,而后能力设立、绑定和骗捏、回笼。
6、骗捏PV / PVC前后比较
6.1、通过描述比较
在莫得骗捏PV、PVC曾经,各个Pod都能够顺手的向存储资源里(譬喻NFS)写数据,顺手一个Pod都能够往磁盘上插一杠子,长远下去磁盘的解决会越来越错杂,而后招致数据骗捏超限,磁盘爆遗失,终末招致磁盘上的集体运用险些挂遗失。
为领略决这个题目,引入了PV、PVC的概记挂,达到限度Pod写入存储数据大小的目的,从而更好地保障了编制的可用性、静止性。
有了PVC、PV之后,集体Pod骗捏存储资源,维持一个轨则:先阴谋 → 后请求 → 再骗捏。
那你肯定有一个疑难,“StorageClass是自愿化设立PV,跟素来的无序不行控是雷同的服从啊,都能够顺手占用存储资源啊”。
素来否则,骗捏StorageClass只是自愿化了设立PV的进程,但连续践诺的是一个存储可控的进程。每个Pod骗捏多少存储空间是固定的,Pod莫得目的逾额骗捏存储空间,更不会训诲到此外运用,要出阻难也只是某个Pod自身出阻难。
6.2、通过图片比较
莫得骗捏PV、PVC曾经的状态,如底下2张图:
有了PV、PVC之后的状态,如下图:
二、施行
在施行PV、PVC、StorageClass曾经,须要读者诤友自行装阁阁NFS服务器。文中示范的本色是通过yaml编排自愿到NFS服务器起上设立PV。
1、Pod骗捏PV、PVC挂载存储卷
1.1、编排PV、PVC、Pod挂载PVC
文中示范的是:Pod的某个目次挂载到NFS的某个目次下。骗捏了nginx镜像,将html文献写在PV方位的NFS服务器上,终竟能够顾念记挂到簸弄PV / PVC 获胜挂载上去了。
yaml文献如下:
# PV编排apiVersion: v1kind: PersistentVolumemetadata: name: nfs-pv1 namespace: dev1 labels: pv: nfs-pv1spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce # Recycle 苟简PVC会同步苟简PV | Retain 苟简PVC不会同步苟简PV persistentVolumeReclaimPolicy: Recycle nfs: path: /data/nfstest/share/pv1 server: 10.20.1.20 readOnly: false---# PVC 编排,通过selector查找PV,K8S里的资源查找都是通过selector查找label标签apiVersion: v1kind: PersistentVolumeClaimmetadata: name: nfs-pvc1 namespace: dev1 labels: pv: nfs-pvc1spec: resources: requests: storage: 100Mi accessModes: - ReadWriteOnce selector: matchLabels: pv: nfs-pv1---# Pod挂载PVC,这里为了视察,直接通过node节点的hostPort透露服务apiVersion: v1kind: Podmetadata: name: webapp namespace: dev1 labels: app: webappspec: containers: - name: webapp image: nginx imagePullPolicy: IfNotPresent ports: - containerPort: 80 hostPort: 8081 volumeMounts: - name: workdir mountPath: /usr/share/nginx/html volumes: - name: workdir persistentVolumeClaim: claimName: nfs-pvc1
践诺kubectl夂箢,稽查施行服从如下:
而后稽查pod的状态,露出pod根本处于设立中,如下:
因而稽查pod的状态kubectl describe pod webapp -n dev1,露出如下相等音问:
是鉴于莫得在NFS上设立此文献夹。到NFS设立此文献夹之后,重启Pod,齐备正常了,而后找到Pod方位Node节点。通过http://nodeip:port造访,能够顾念记挂到获胜的界面:
[root@k8s-master pv-pvc-storageclass]# kubectl get pods -n dev1 -owide | grep webappwebapp 1/1 Running 0 4m17s 10.21.69.214 k8s-worker-3
此时鉴于nginx下还莫得html页面,是以顾念记挂不到本色。此时到NFS服务器对应的目次/data/nfstest/share/pv1下施行index.html页面,而后考订页面即可,界面如下:
也能够通过长入到Pod里面,稽追查证是够挂载获胜。
践诺长入Pod的夂箢kubectl exec -it webapp -n dev1 -- /bin/sh,能够顾念记挂到如下页面:
2、Pod骗捏StorageClass自愿挂载存储卷
2.1、装阁阁 Provisioner
文当采纳通过helm的花式装阁阁nfs-subdir-external-provisioner,这种花式相对轻省。装阁阁文档、装阁阁进程见下文:
- 装阁阁文档:
https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/#nfs
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
- 装阁阁进程:
通过以下3个症结结束nfs-subdir-external-provisioner的装阁阁。
- 装阁阁helm,本文以mac为例
brew install heml
- 装阁阁nfs-subdir-external-provisioner,践诺以下2个夂箢:
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner -n kube-system \ --set image.repository=dyrnq/nfs-subdir-external-provisioner \ --set nfs.server=10.20.1.20 \ --set nfs.path=/data/nfstest/nfs-storage
这里瞩目几个参数:
image.repository:编削了镜像的所在,默许用的国际镜像很有能够拉不下来
nfs.server:你的NFS服务器所在
nfs.path:存储目次
- 稽查helm装阁阁的结果:
践诺夂箢:helm list -A,稽查helm装阁阁结果:
稽查是否设立了对应的pod,要是莫得编削镜像所在会根本拉捏阻难,如下图:
编削镜像所在后获胜滥觞Pod,如下图:
2.2、骗捏StorageClass
文中示范的是:Pod簸弄StorageClass自愿设立PV,同期在对应的存储目次上设立了文献,写入了数据。
yaml文献如下:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: nfs-storage-1provisioner: cluster.local/nfs-subdir-external-provisionerparameters: # 配阁阁为"false"时苟简PVC不会维持数据,"true"则维持数据 archiveOnDelete: "false"mountOptions: # 指定NFS版本,这个须要遵照NFS Server版本号配阁阁 - nfsvers=4---# 设立PVCkind: PersistentVolumeClaimapiVersion: v1metadata: name: nfs-storage-pvc-1 namespace: dev1spec: storageClassName: nfs-storage-1 #须要与上面设立的storageclass的称谓雷同 accessModes: - ReadWriteOnce resources: requests: storage: 10Mi---kind: PodapiVersion: v1metadata: name: nfs-storage-pod-1 namespace: dev1spec: containers: - name: nfs-storage-pod-1 image: busybox command: - "/bin/sh" args: - "-c" - "touch /mnt/teststorage && echo 111 > /mnt/teststorage && exit 0 || exit 1" ## 设立一个称谓为"SUCCESS"的文献 volumeMounts: - name: nfs-pvc mountPath: "/mnt" restartPolicy: "Never" volumes: - name: nfs-pvc persistentVolumeClaim: claimName: nfs-storage-pvc-1
践诺kubectl夂箢后,能够顾念记挂到如下服从:
图片
图片
能够顾念记挂到如我们预测的那样,通过storageClass自愿设立了PV,同期在NFS对应的存储目次上设立了文献,写入了数据。
至此,我们施行进程险些遣散。
三、概括
本文症结道解了PV、PVC、StorageClass的表面和实战。
一句话概括:PV、PVC是K8S用来做存储解决的资源目的,它们让存储资源的骗捏变得可控,从而保障编制的静止性、靠得住性。StorageClass则是为了减轻人造的职业量而去自愿化设立PV的组件。集体Pod骗捏存储惟有一个轨则:先阴谋 → 后请求 → 再骗捏。
参考文献:《Kubernetes权威指南》
责任编辑:武晓燕 源泉: 不躁急的顺次员 PVPVC存储2023年9月23日十二烷基二甲基苄基氯化铵价格最新行情预测
2023年9月23日山东省石脑油价格最新行情预测