关于k8s中 storageclass 的 is-default-sc 默认存储设置

本文解释了Kubernetes中默认StorageClass的作用、设置和管理方法,包括准入控制器的影响,以及如何在默认配置不适合工作负载时进行调整。管理员需注意默认StorageClass可能被自动重建的情况。

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

为什么要改变默认存储类?

取决于安装模式,你的 Kubernetes 集群可能和一个被标记为默认的已有 StorageClass 一起部署。 这个默认的 StorageClass 以后将被用于动态的为没有特定存储类需求的 PersistentVolumeClaims 配置存储。更多细节请查看 PersistentVolumeClaim 文档。

  • 如果准入控制器插件被启用,则管理员可以设置一个默认的 StorageClass。 所有未设置 storageClassName 的 PVC 都只能绑定到隶属于默认存储类的 PV 卷。 设置默认 StorageClass 的工作是通过将对应 StorageClass 对象的注解 storageclass.kubernetes.io/is-default-class 赋值为 true 来完成的。 如果管理员未设置默认存储类,集群对 PVC 创建的处理方式与未启用准入控制器插件时相同。 如果设定的默认存储类不止一个,当 PVC 被动态制备时将使用最新的默认存储类。
  • 如果准入控制器插件被关闭,则不存在默认 StorageClass 的说法。 所有将 storageClassName 设为 "" 的 PVC 只能被绑定到也将 storageClassName 设为 "" 的 PV。 不过,只要默认的 StorageClass 可用,就可以稍后更新缺少 storageClassName 的 PVC。 如果这个 PVC 更新了,它将不再绑定到也将 storageClassName 设为 "" 的 PV。

预先安装的默认 StorageClass 可能不能很好的适应你期望的工作负载;例如,它配置的存储可能太过昂贵。 如果是这样的话,你可以改变默认 StorageClass,或者完全禁用它以防止动态配置存储。

删除默认 StorageClass 可能行不通,因为它可能会被你集群中的扩展管理器自动重建。 请查阅你的安装文档中关于扩展管理器的细节,以及如何禁用单个扩展

改变默认 StorageClass

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

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

注意:最多只能有一个 StorageClass 能够被标记为默认。 如果它们中有两个或多个被标记为默认,Kubernetes 将忽略这个注解, 也就是它将表现为没有默认 StorageClass。
 

[root@haiouc ~]# k get storageclass rbd -o yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    meta.helm.sh/release-name: rbd
    meta.helm.sh/release-namespace: rbd
    storageclass.kubernetes.io/is-default-class: "true"  # is-default-class
  creationTimestamp: "2023-06-27T11:16:51Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: rbd

### KubernetesStorageClass 的相关概念和使用方法 #### 1. **StorageClass 的核心功能** StorageClassKubernetes 中用于动态分配持久卷(PersistentVolume, PV)的核心资源。它允许集群管理员定义不同类型的存储配置,例如云存储、本地存储或网络存储等。用户可以通过 PersistentVolumeClaim(PVC)按需请求存储资源[^1]。 #### 2. **StorageClass 的基本配置** 以下是一个简单的 StorageClass 配置示例,展示了如何定义一个基于 AWS EBS 的 StorageClass: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard-ebs provisioner: ebs.csi.aws.com parameters: type: gp2 reclaimPolicy: Retain volumeBindingMode: Immediate ``` - `provisioner` 字段指定了存储提供者,例如 AWS 的 EBS 或 GCP 的 PD。 - `parameters` 字段可以包含与特定存储后端相关的参数,如磁盘类型。 - `reclaimPolicy` 定义了当 PVC 被删除时 PV 的回收策略,支持 `Retain` 和 `Delete`。 - `volumeBindingMode` 决定了卷绑定的时间点,`Immediate` 表示在 PVC 创建时立即绑定,而 `WaitForFirstConsumer` 表示在 Pod 使用时才绑定[^4]。 #### 3. **设置默认 StorageClass** 为了简化用户的操作,可以为集群设置一个默认StorageClass。这样,当 PVC 没有指定 `storageClassName` 时,Kubernetes 会自动使用默认StorageClass 进行存储卷分配[^2]。 通过以下命令可以将某个 StorageClass 设置默认值: ```bash kubectl patch storageclass course-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' ``` 此命令将 `course-nfs-storage` 设置默认StorageClass[^3]。 #### 4. **动态存储供给** StorageClass 的主要优势之一是支持动态存储供给。当用户创建一个 PVC 时,Kubernetes 会根据 StorageClass 的定义动态创建一个 PV 并将其绑定到 PVC 上。这种机制极大地简化了存储管理流程[^1]。 #### 5. **StorageClass 的扩展性** StorageClass 不仅限于云存储提供商,还可以与其他存储解决方案集成,例如 Ceph、GlusterFS 和 Rook 等。通过自定义 provisioner,可以实现对多种存储后端的支持[^4]。 #### 6. **StorageClass 的最佳实践** - 定义多个 StorageClass 来区分不同类型的存储需求,例如高性能 SSD 和低成本 HDD。 - 根据实际需求选择合适的 `volumeBindingMode`,以优化调度性能。 - 定期监控 StorageClass 的使用情况,确保集群中的存储资源充足[^4]。 ```python # 示例代码:检查 StorageClass 的使用情况 import subprocess def list_storage_classes(): result = subprocess.run(["kubectl", "get", "sc", "-o", "json"], capture_output=True, text=True) return result.stdout print(list_storage_classes()) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络飞鸥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值