吸油记无限金币iOS下载焦点休闲探索焦点

大白话说明白K8S的PV / PVC / StorageClass(理论+实践)

2023-09-30 21:09:03白酒+大模型,才是茅台的跨界之道?【愤怒的小鸟GO

领路话说邃晓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的装阁阁。

  1. 装阁阁helm,本文以mac为例
brew install heml
  1. 装阁阁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:存储目次

  1. 稽查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的装阁阁。

  1. 装阁阁helm,本文以mac为例
brew install heml
  1. 装阁阁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:存储目次

  1. 稽查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的装阁阁。

  1. 装阁阁helm,本文以mac为例
brew install heml
  1. 装阁阁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:存储目次

  1. 稽查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日山东省石脑油价格最新行情预测

大白话说明白K8S的PV / PVC / StorageClass(理论+实践)

领路话说邃晓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的装阁阁。

  1. 装阁阁helm,本文以mac为例
brew install heml
  1. 装阁阁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:存储目次

  1. 稽查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存储
安全百店ANVA自律组
游戏狗微信2023年9月23日山东省全氟壬烯氧基苯磺酸钠(OBS)价格最新行情预测
友情链接