Kubernetes v1.26 配置默认存储 StorageClass

2023年 5月 4日 27.9k 0

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: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

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

$kubectl get pvc

NAME      STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-1     Pending

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

#查看storageClass
[root@k8s-master-01 ~]# kubectl get sc
NAME              PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
csi-cephfs-sc     cephfs.csi.ceph.com   Delete          Immediate              true                   2d23h
csi-rbd-sc        rbd.csi.ceph.com      Delete          Immediate              true                   2d23h
local    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 pvc

NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
pvc-1     Bound    pvc-06a964ca-f997-4780-8627-b5c3bf5a87d8   1Gi        RWO            local   87m

查看默认StorageClass已经被修改

$ kubectl get storageclass

NAME             PROVISIONER               AGE
local         kubernetes.io/gce-pd      1d

官方文档:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/change-default-storage-class/https://kubernetes.io/zh-cn/blog/2023/01/05/retroactive-default-storage-class/

相关文章:

  1. Harbor 启动报错 502 Bad Gateway
  2. Kuerbernetes 1.11 集群二进制安装
  3. Kubernetes 1.14 二进制集群安装
  4. Kubernetes Init Container (初始化容器)

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论