Kubernetes v1.26 配置默认存储 StorageClass

本文介绍了Kubernetes v1.26中更改默认StorageClass的方法,该特性已从Alpha阶段晋升至Beta。内容包括如何启用新特性,更改默认StorageClass的两种策略,以及启用特性和演示过程的详细步骤。当启用后,未指定StorageClass的PVC可以在后续被更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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-managerkube-apiserver 中使用 --feature-gates 配置启用

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

演示

创建一个PvC文件

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4.  name: pvc-1
  5. spec:
  6.  accessModes:
  7.  - ReadWriteOnce
  8.  resources:
  9.    requests:
  10.      storage: 1Gi

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

  1. $kubectl get pvc
  2. NAME      STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  3. pvc-1     Pending

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

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

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

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

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

  1. $ kubectl get pvc
  2. NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
  3. pvc-1     Bound    pvc-06a964ca-f997-4780-8627-b5c3bf5a87d8   1Gi        RWO            local   87m

查看默认StorageClass已经被修改

  1. $ kubectl get storageclass
  2. NAME             PROVISIONER               AGE
  3. local         kubernetes.io/gce-pd      1d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值