• StorageClass
    • 1. StorageClass概述
    • 2. StorageClass的属性
      • 2.1. Provisioner(存储分配器)
      • 2.2. Reclaim Policy(回收策略)
      • 2.3. Mount Options(挂载选项)
      • 2.4. 参数

    StorageClass

    1. StorageClass概述

    StorageClass提供了一种描述存储类(class)的方法,不同的class可能会映射到不同的服务质量等级和备份策略或其他策略等。

    StorageClass 对象中包含 provisionerparametersreclaimPolicy 字段,当需要动态分配 PersistentVolume 时会使用到。当创建 StorageClass 对象时,设置名称和其他参数,一旦创建了对象就不能再对其更新。也可以为没有申请绑定到特定 class 的 PVC 指定一个默认的 StorageClass

    StorageClass对象文件

    1. kind: StorageClass
    2. apiVersion: storage.k8s.io/v3
    3. metadata:
    4. name: standard
    5. provisioner: kubernetes.io/aws-ebs
    6. parameters:
    7. type: gp2
    8. reclaimPolicy: Retain
    9. mountOptions:
    10. - debug

    2. StorageClass的属性

    2.1. Provisioner(存储分配器)

    Storage class 有一个分配器(provisioner),用来决定使用哪个卷插件分配 PV,该字段必须指定。可以指定内部分配器,也可以指定外部分配器。外部分配器的代码地址为: kubernetes-incubator/external-storage,其中包括NFSCeph等。

    2.2. Reclaim Policy(回收策略)

    可以通过reclaimPolicy字段指定创建的Persistent Volume的回收策略,回收策略包括:Delete 或者 Retain,没有指定默认为Delete

    2.3. Mount Options(挂载选项)

    由 storage class 动态创建的 Persistent Volume 将使用 class 中 mountOptions 字段指定的挂载选项。

    2.4. 参数

    Storage class 具有描述属于 storage class 卷的参数。取决于分配器,可以接受不同的参数。 当参数被省略时,会使用默认值。

    例如以下使用Ceph RBD

    1. kind: StorageClass
    2. apiVersion: storage.k8s.io/v3
    3. metadata:
    4. name: fast
    5. provisioner: kubernetes.io/rbd
    6. parameters:
    7. monitors: 30.36.353.305:6789
    8. adminId: kube
    9. adminSecretName: ceph-secret
    10. adminSecretNamespace: kube-system
    11. pool: kube
    12. userId: kube
    13. userSecretName: ceph-secret-user
    14. fsType: ext4
    15. imageFormat: "2"
    16. imageFeatures: "layering"

    对应的参数说明

    • monitors:Ceph monitor,逗号分隔。该参数是必需的。

    • adminId:Ceph 客户端 ID,用于在池(ceph pool)中创建映像。 默认是 “admin”。

    • adminSecretNamespace:adminSecret 的 namespace。默认是 “default”。

    • adminSecret:adminId 的 Secret 名称。该参数是必需的。 提供的 secret 必须有值为 “kubernetes.io/rbd” 的 type 参数。

    • pool: Ceph RBD 池. 默认是 “rbd”。

    • userId:Ceph 客户端 ID,用于映射 RBD 镜像(RBD image)。默认与 adminId 相同。

    • userSecretName:用于映射 RBD 镜像的 userId 的 Ceph Secret 的名字。 它必须与 PVC 存在于相同的 namespace 中。该参数是必需的。 提供的 secret 必须具有值为 “kubernetes.io/rbd” 的 type 参数,例如以这样的方式创建:

      1. kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \
      2. --from-literal=key='QVFEQ1pMdFhPUnQrSmhBQUFYaERWNHJsZ3BsMmNjcDR6RFZST0E9PQ==' \
      3. --namespace=kube-system
    • fsType:Kubernetes 支持的 fsType。默认:”ext4”。

    • imageFormat:Ceph RBD 镜像格式,”1” 或者 “2”。默认值是 “1”。

    • imageFeatures:这个参数是可选的,只能在你将 imageFormat 设置为 “2” 才使用。 目前支持的功能只是 layering。 默认是 ““,没有功能打开。

    参考文章:

    • https://kubernetes.io/docs/concepts/storage/storage-classes/