• K8S实战(十七)| 通过 StorageClass 实现动态卷供应


    前言

    StorageClass 相当于一个创建 PV 的模板,用户通过 PVC 申请存储卷,StorageClass 通过模板自动创建 PV,然后和 PVC 进行绑定。

    更新历史

    启用动态卷供应

    创建 StorageClass 对象即可,即创建了模板。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: slow
    provisioner: kubernetes.io/gce-pd
    parameters:
      type: pd-standard
    ---  
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: fast
    provisioner: kubernetes.io/gce-pd
    parameters:
      type: pd-ssd
    

    以上文件创建了两种不同类型的 StorageClass,用户根据自己需求通过 PVC 申请即可。

    使用动态卷供应

    用户通过 PVC 来申请。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: claim1
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: fast
      resources:
        requests:
          storage: 30Gi
    

    以上文件说明该 PVC 向 storageClassName 为 fast 的存储类申请卷,将会得到一个 PV 来与该 PVC 进行绑定。

    实践

    《K8S实战(六)| 配置NFS动态卷提供持久化存储》 https://blog.zuolinux.com/2020/06/10/nfs-client-provisioner.html

    回收策略

    由 StorageClass 动态创建的 PersistentVolume 会在类的 reclaimPolicy 字段中指定回收策略,可以是 Delete 或者 Retain。

    如果 StorageClass 对象被创建时没有指定 reclaimPolicy,它将默认为 Delete。意味着 PV 被删除后,原始数据也会被删除。

    建议设置为 Retain。

    默认 StorageClass

    查看当前的默认 StorageClass

    # kubectl get sc
    NAME                            PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    managed-nfs-storage (default)   fuseim.pri/ifs   Delete          Immediate           false                  9m46s
    

    标记默认的 StorageClass 为非默认

    kubectl patch storageclass 目前的默认storageclass名称 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    

    标记一个普通 sc 为默认

    kubectl patch storageclass storageclass名称 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    

    结束语

    StorageClass 对象并不是为了自动创建 PV 而建立的,所以在静态创建机制和动态创建机制中都应该存在该参数。

    如果 PVC 中没有指定 storageClassName,那么:

    1. 如果集群已经开启了名叫 DefaultStorageClass 的 Admission Plugin,该 Plugin 会为 PVC 和 PV 自动添加一个默认的 StorageClass。
    2. 如果没有该 Plugin,PVC 的 storageClassName 的值是 "",它只能跟 storageClassName 是 "" 的 PV 进行绑定。

    联系我

    微信公众号:zuolinux_com

    微信扫码关注

  • 相关阅读:
    CSS书写规范参考
    CSS实现垂直居中的5种方法
    HTML5新标签
    sublime win10下中文输入框自动跟随解决
    变量更改值
    查看文件
    list copy
    Tomcat JAR包冲突报错
    第一周单元3:Requests库网络爬虫实例-查询ip地址
    .strip()的喵用!
  • 原文地址:https://www.cnblogs.com/zuolinux/p/13693805.html
Copyright © 2020-2023  润新知