关于Kubernetes的一些存储卷

一、StorageClass

StorageClass 是 Kubernetes 中用来定义存储的动态供应策略的资源对象。它提供了一种抽象机制,用于描述存储的类型、性能需求、供应方式等。通过 StorageClass,Kubernetes 可以动态地为 PVC 创建合适的 PV

作用:

1、动态创建 PV

  • 当 PVC 请求指定了 StorageClass,Kubernetes 会根据 StorageClass 的配置动态创建 PV,并绑定到 PVC。

2、抽象存储类型

  • 它可以定义不同的存储类型,如本地存储、NFS、云存储(如 AWS EBS、GCP Persistent Disk)等。

3、性能优化

  • 不同的 StorageClass 可以定义不同的性能参数,例如快速存储(SSD)、高可用存储等。

创建一个默认的StorageClass,让pvc自动绑定到StorageClass上

default-storage.yaml

apiVersion: storage.k8s.io/v1 # 指定资源版本
kind: StorageClass # 资源类型为StorageClass
metadata: # 定义资源的名称标签等
  name: default-storage # 指定为k8s中默认的存储卷
  annotations:
    storageclass.kubernetes.io/is-default-class: "true" # 这个注解将 default-storage 标记为集群的默认 StorageClass,如果pvc没有指定StorageClass,那么就会自动使用这个StorageClass
provisioner: kubernetes.io/no-provisioner  # 或根据你的存储类型更改此值
volumeBindingMode: WaitForFirstConsumer  # 等待 Pod 调度后再绑定存储

集群级别的资源,只需要创建一次

# 查看
kubectl get storageclass
# 创建默认的
kubectl apply -f default-storage.yaml
# 删除
kubectl delete storageclass <storageclass-name>

二、 PV

PersistentVolume (PV) 是 Kubernetes 中的一种资源类型,用于抽象和管理底层存储设备。它是集群管理员提供的存储资源,可以与应用程序通过 PersistentVolumeClaim (PVC) 进行绑定,为应用提供持久化存储。PV 是存储的供应者,而 PVC 是存储的消费者。

特点:

1、存储抽象: PV 抽象了底层存储(如本地磁盘、网络存储、云存储等),使应用程序无需关注具体的存储实现细节。

2、独立于 Pod 生命周期: PV 的生命周期独立于 Pod。当 Pod 被删除或重建时,存储数据仍然保留在 PV 中。

3、支持多种存储类型: PV 可以代表不同类型的存储,例如:

  • 本地存储
  • NFS(网络文件系统)
  • iSCSI
  • 云存储(如 AWS EBS、GCE PD 等)

4、通过 PVC 绑定: PV 和 PVC 的绑定可以是静态或动态的。

  • 静态供应:管理员手动创建 PV。
  • 动态供应:通过 StorageClass 动态创建 PV。

创建pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-pv  # PV 的名称
spec: # 资源描述
  capacity:
    storage: 10Gi  # 存储容量
  volumeMode: Filesystem  # 卷模式(Filesystem 或 Block)
  accessModes:
    - ReadWriteOnce  # 访问模式
  persistentVolumeReclaimPolicy: Retain  # 回收策略
  storageClassName: default-storage  # 关联的 StorageClass
  local:  # 本地存储
    path: /mnt/data  # 本地磁盘路径
  nodeAffinity:  # 节点亲和性
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values: # 指定存储卷绑定的节点
                - node1
                - node2 

配置解释

  • capacity:定义存储容量

  • volumeMode

    • Filesystem:以文件系统的形式挂载
    • Block:以裸块存储设备挂载。
  • accessModes

    • ReadWriteOnce (RWO):一个节点可以读写。
    • ReadOnlyMany (ROX):多个节点可以只读。
    • ReadWriteMany (RWX):多个节点可以读写。
  • persistentVolumeReclaimPolicy

    • Retain:保留数据,手动回收。
    • Delete:PV 和数据会自动删除。
    • Recycle:数据被清除后,PV 会被重新利用。
  • storageClassName:与 PVC 中的 storageClassName 匹配,用于绑定。

  • local:本地存储路径。

  • nodeAffinity:限制 PV 绑定到特定的节点。

命令

# 查看当前pv列表
kubectl get pv
# 详情
kubectl describe pv <pv-name>
# 删除pv,如果回收策略为Retain,需要对存储卷目录进行手动清理,再删除pv
kubectl delete pv <pv-name>

三、PVC

Persistent Volume Claim (PVC) 是 Kubernetes 中的一种资源对象,用于请求存储资源。PVC 是应用程序和存储之间的连接桥梁。它通过声明存储需求(如大小、访问模式等)来请求存储资源,而 Kubernetes 会根据这些需求来选择合适的 Persistent Volume (PV) 来提供支持。

default-pvc.yaml

apiVersion: v1 # 资源版本
kind: PersistentVolumeClaim # 资源类型
metadata: # 资源名称和标签
  name: default-pvc # 资源名称
spec: # 资源描述
  accessModes: # 存储卷的访问模式
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi # 存储大小
  storageClassName: default-storage # 指定的storageClass名称

spec下的配置解释

  • accessModes
    • ReadWriteOnce (RWO):一个节点可以读写。
    • ReadOnlyMany (ROX):多个节点可以只读。
    • ReadWriteMany (RWX):多个节点可以读写。
  • resources
    • requests:定义了 PVC 请求的存储资源
      • storage:指定请求的存储大小,PVC 会选择符合此要求的 Persistent Volume (PV) 来进行绑定
  • storageClassName:指定的storageclass名称

命令

# 查看pvc列表
kubectl get pvc
# 详情日志
kubectl describe pvc <pvc-name>
# 删除pvc
kubectl delete pvc <pvc-name>

四、创建绑定

创建storageclass、pv、pvc并将其绑定起来,等待Pod调用

default-storage-pv-pvc.yaml

# 创建 storageclass
apiVersion: storage.k8s.io/v1 # 指定资源版本
kind: StorageClass # 资源类型为StorageClass
metadata: # 定义资源的名称标签等
  name: default-storage # 指定为k8s中默认的存储卷
  annotations:
    storageclass.kubernetes.io/is-default-class: "true" # 这个注解将 default-storage 标记为集群的默认 StorageClass,如果pvc没有指定StorageClass,那么就会自动使用这个StorageClass
provisioner: kubernetes.io/no-provisioner  # 或根据你的存储类型更改此值
volumeBindingMode: WaitForFirstConsumer  # 等待 Pod 调度后再绑定存储

---
# 创建pv
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-pv  # PV 的名称
spec: # 资源描述
  capacity:
    storage: 10Gi  # 存储容量
  volumeMode: Filesystem  # 卷模式(Filesystem 或 Block)
  accessModes:
    - ReadWriteOnce  # 访问模式
  persistentVolumeReclaimPolicy: Retain  # 回收策略
  storageClassName: default-storage  # 关联的 StorageClass
  local:  # 本地存储
    path: /mnt/data  # 本地磁盘路径
  nodeAffinity:  # 节点亲和性
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values: # 指定存储卷绑定的节点
                - k8snode1
                - k8snode2

---
# 创建pvc
apiVersion: v1 # 资源版本
kind: PersistentVolumeClaim # 资源类型
metadata: # 资源名称和标签
  name: default-pvc # 资源名称
spec: # 资源描述
  accessModes: # 存储卷的访问模式
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi # 存储大小
  storageClassName: default-storage # 指定的storageClass名称

命令

# 创建
kubectl apply -f default-storage-pv-pvc.yaml
# 查看storageclass、pv、pvc
kubectl get storageclass,pv,pvc
# 分别查看详情
kubectl describe storageclass default-storage
kubectl describe pv default-pv
kubectl describe pvc default-pvc
# 删除,根据配置文件删除
kubectl delete -f default-storage-pv-pvc.yaml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值