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
相关推荐
我没有开挂3 小时前
旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑
运维·docker·容器
小鸡,啄米4 小时前
centos9安装docker 配置docker代理
运维·docker·容器
oceanweave4 小时前
【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子
学习·kubernetes
小锋学长生活大爆炸10 小时前
【教程】Docker更换存储位置
运维·docker·容器
gnufre11 小时前
Kubernetes 1.28 无 Docker 运行时环境下的容器化构建实践:Kaniko + Jenkins 全链路详解
kubernetes·jenkins·kaniko
川石教育14 小时前
测试工程师如何学会Kubernetes(k8s)容器知识
云原生·容器·kubernetes·kubernetes容器·kubernetes教程
iRayCheung15 小时前
Kind方式部署k8s单节点集群并创建nginx服务对外访问
nginx·kubernetes·kind
小黑_深呼吸16 小时前
Prometheus实战教程:k8s平台-Mysql监控案例
运维·学习·kubernetes·prometheus
THMAIL16 小时前
mac M芯片运行docker-desktop异常问题
macos·docker·容器
家庭云计算专家18 小时前
还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍
服务器·人工智能·docker·容器·编辑器