Kubernetes v1.26 配置默认存储 StorageClass

241 阅读1分钟

Kubernetes v1.25 引入了一个 Alpha 特性来更改默认 StorageClass 被分配到 PersistentVolumeClaim (PVC) 的方式。 启用此特性后,你不再需要先创建默认 StorageClass,再创建 PVC 来分配类。 此外,任何未分配 StorageClass 的 PVC 都可以在后续被更新。此特性在 Kubernetes v1.26 中已进阶至 Beta。

更改默认 StorageClass

启用这个 Alpha 特性后,管理员想要更改默认 StorageClass 时会有两个选项:

  • 在移除与 PVC 关联的旧 StorageClass 之前,创建一个新的 StorageClass 作为默认值。 这将导致在短时间内出现两个默认值。此时,如果用户要创建一个 PersistentVolumeClaim, 并将 storageClassName 设置为 null(指代默认 StorageClass), 则最新的默认 StorageClass 将被选中并指定给这个 PVC。
  • 先移除旧的默认值再创建一个新的默认 StorageClass。这将导致短时间内没有默认值。 接下来如果用户创建一个 PersistentVolumeClaim,并将 storageClassName 设置为 null (指代默认 StorageClass),则 PVC 将永远处于 Pending 状态。 一旦默认 StorageClass 可用,用户就不得不通过删除并重新创建 PVC 来修复这个问题。

如何启用

需要在kube-controller-manager 和 kube-apiserver 中使用 --feature-gates 配置启用

--feature-gates="...,RetroactiveDefaultStorageClass=true"

演示

创建一个PvC文件

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: pvc-1spec:  accessModes:  - ReadWriteOnce  resources:    requests:      storage: 1Gi

在没有默认StorageClass存储时,PVC文件为Pending状态

$kubectl get pvcNAME      STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGEpvc-1     Pending

我们需要将本地有的StorageClass 设置为默认存储

#查看storageClass[root@k8s-master-01 ~]# kubectl get scNAME              PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGEcsi-cephfs-sc     cephfs.csi.ceph.com   Delete          Immediate              true                   2d23hcsi-rbd-sc        rbd.csi.ceph.com      Delete          Immediate              true                   2d23hlocal    openebs.io/local      Delete          WaitForFirstConsumer   false                  8d#变更为默认存储kubectl patch local -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'#local为你的storageclass名称

实际上就是sc添加了下面的一行

    storageclass.kubernetes.io/is-default-class: "true"

1681983971554.png

确认 PersistentVolumeClaims 现在已被正确制备,并且已使用新的默认 StorageClass

$ kubectl get pvcNAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGEpvc-1     Bound    pvc-06a964ca-f997-4780-8627-b5c3bf5a87d8   1Gi        RWO            local   87m

查看默认StorageClass已经被修改

$ kubectl get storageclassNAME             PROVISIONER               AGElocal         kubernetes.io/gce-pd      1d

官方文档:
kubernetes.io/zh-cn/docs/…
kubernetes.io/zh-cn/blog/…