K8S中SC、PV、PVC的理解

存储类(StorageClass)定义了持久卷声明(PersistentVolumeClaim)所需的属性和行为,而持久卷(PersistentVolume)是实际的存储资源,持久卷声明(PersistentVolumeClaim)是 Pod 对持久卷的请求。

简而言之,存储类定义了持久卷的供应方式,持久卷是预先配置的存储资源,持久卷声明是 Pod 对持久卷的请求。存储类通过与 持久卷声明 绑定来创建符合需求的 持久卷,使得 Pod 可以使用持久卷。

从北漂租客眼中的看法:

  • 存储类 相当于我爱**家、链**等这种租房中介商
  • 持久卷 相当于一套房子(三室两厅、两室三厅、豪华别墅等)
  • 持久卷声明 相当于租客的需求
  • Pod 相当于租客

租客(Pod)想租房子需要找到中介(SC)说出自己的需求(PVC)。中介(SC)根据租客需求(PVC)找到房子(PV)提供给租客使用。

在 Kubernetes 中,存储类(StorageClass)、持久卷(PersistentVolume,PV)和持久卷声明(PersistentVolumeClaim,PVC)是用于管理持久化存储的关键组件。下面是它们之间的关系和作用:

  1. 存储类(StorageClass):存储类是用于定义持久卷的供应方式的抽象。它定义了存储卷的类型、访问模式、回收策略等信息。存储类允许管理员为不同的存储需求创建不同的策略,并且可以根据需要动态创建和删除持久卷。当创建 PVC 时,可以指定要使用的存储类,以便 Kubernetes 根据存储类的定义来创建相应的 PV。
  2. 持久卷(PersistentVolume,PV):持久卷是集群中的一块网络存储空间,它独立于 Pod 的生命周期。PV 是由管理员预先配置的,可以是物理存储设备、网络存储或云存储等。PV 具有容量、访问模式和回收策略等属性。PV 可以手动创建,也可以由存储类动态创建。当 PVC 请求一个符合条件的 PV 时,Kubernetes 会根据存储类的定义和可用的 PV 来选择并绑定一个 PV 给 PVC。
  3. 持久卷声明(PersistentVolumeClaim,PVC):持久卷声明是 Pod 对持久卷的请求。PVC 描述了 Pod 对存储的需求,包括容量、访问模式等。PVC 是通过与存储类绑定来创建符合需求的 PV 的一种方式。当创建 PVC 时,可以指定所需的存储类和其他属性,Kubernetes 会根据这些信息来选择并绑定一个合适的 PV 给 PVC。Pod 可以通过 PVC 来访问和使用持久卷。

PV/PVC 创建

bash 复制代码
# PV
apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/provisioned-by: cluster.local/nfs-provisioner
  finalizers:
  - kubernetes.io/pv-protection
  name: pvc-8503070c-0b6f-4bb5-aa58-17722872d8ef
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 2Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: xxx-inbound-collector-xxx-job-start-load
  mountOptions:
  - noresvport
  nfs:
    path: /data/nfs-external/xxx-xxx-uat-xxx-inbound-collector-xxx-job-start-load-pvc-8503070c-0b6f-4bb5-aa58-17722872d8ef
    server: x.32.x.148
  persistentVolumeReclaimPolicy: Delete
  storageClassName: nfs-client
  volumeMode: Filesystem

# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
    volume.beta.kubernetes.io/storage-provisioner: cluster.local/nfs-provisioner
  creationTimestamp: "2023-08-29T08:18:23Z"
  finalizers:
  - kubernetes.io/pvc-protection
  name: xxx-inbound-collector-xxx-job-start-load
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  storageClassName: nfs-client
  volumeMode: Filesystem
  volumeName: pvc-8503070c-0b6f-4bb5-aa58-17722872d8ef
相关推荐
—Qeyser3 小时前
Flutter GestureDetector 完全指南:让任何组件都能响应手势
flutter·云原生·容器·kubernetes
江湖有缘4 小时前
从零开始:基于 Docker Compose部署高可用 Miniflux RSS阅读器
运维·docker·容器
怜淇7 小时前
docker拉取openjdk8:jre失败
java·docker·容器
techzhi9 小时前
Apifox CLI + GitLab CI:接口自动化测试实施记录
java·ci/cd·kubernetes·gitlab·yapi·运维开发·fastapi
间彧9 小时前
Arthas Tunnel Server 在 Kubernetes 中的深度集成与实战指南
kubernetes
间彧9 小时前
在Docker Compose或Kubernetes中集成Arthas的最佳实践是什么?
kubernetes
❀͜͡傀儡师11 小时前
docker部署BentoPDF应用
运维·docker·容器
江湖有缘11 小时前
Docker快速部署NeonLink:打造你的私人书签管理平台
运维·docker·容器
岚天start12 小时前
【K8S分配率】Shell脚本计算Kubernetes集群CPU和内存总分配率
云原生·容器·kubernetes·分配率
Connie145112 小时前
Kubernates证书续期操作步骤
kubernetes