Kubernetes 默认存储类

网友投稿 1083 2022-11-30

Kubernetes 默认存储类

Kubernetes 默认存储类

DefaultStorageClass是默认存储类,当后端有多个存储的时候,就可以去指定一个默认存储类。yaml当中就不需要再去指定存储类名字了,那么就会使用这个默认的存储。

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

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

PVC StorageClass为空的情况

首先PVC模板的StorageClass如何为空,则会直接用系统的default StorageClass,系统如果没有default StorageClass,需要手动指定:

[root@master ~]# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGElocal (default) openebs.io/local Delete WaitForFirstConsumer false 39dlocal-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 11dmanaged-nfs-storage fuseim.pri/ifs Delete Immediate false 39d[root@master ~]# kubectl get sc -o yaml storageclass.beta.kubernetes.io/is-default-class: "true"

改变默认 StorageClass

标记默认 StorageClass 非默认:

默认 StorageClass 的注解 ​​storageclass.kubernetes.io/is-default-class​​​ 设置为 ​​true​​​。 注解的其它任意值或者缺省值将被解释为 ​​false​​。

要标记一个 StorageClass 为非默认的,你需要改变它的值为 ​​false​​:

[root@master ~]# kubectl patch storageclass local -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"false"}}}'storageclass.storage.k8s.io/local patched[root@master ~]# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGElocal openebs.io/local Delete WaitForFirstConsumer false 39dlocal-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 11dmanaged-nfs-storage fuseim.pri/ifs Delete Immediate false 39d

标记一个 StorageClass 为默认的:

和前面的步骤类似,你需要添加/设置注解 ​​storageclass.kubernetes.io/is-default-class=true​​。

[root@master ~]# kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'storageclass.storage.k8s.io/managed-nfs-storage patched[root@master ~]# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGElocal openebs.io/local Delete WaitForFirstConsumer false 39dlocal-storage kubernetes.io/no-provisioner Delete WaitForFirstConsumer false 11dmanaged-nfs-storage (default) fuseim.pri/ifs Delete Immediate false 39d

验证使用默认存储类

[root@master default]# kubectl apply -f pvc-default-dy.yaml persistentvolumeclaim/nfs-pvc created[root@master default]# cat pvc-default-dy.yaml apiVersion: v1kind: PersistentVolumeClaimmetadata: name: nfs-pvc namespace: defaultspec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi [root@master default]# kubectl get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGEnfs-pvc Bound pvc-b16222f1-da3b-4024-9c9c-22ec782b23dd 5Gi RWO managed-nfs-storage 4s[root@master default]# kubectl get pvNAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGEpvc-b16222f1-da3b-4024-9c9c-22ec782b23dd 5Gi RWO Delete Bound default/nfs-pvc managed-nfs-storage 16s

不指定存储类的动态配置

列出存储类

当你创建名为 fast 的自定义存储类时,并未检查集群中是否己定义任何现有存储类, 现在为什么不这样试试?以下是 可用的存储类

$ kubectl get sc NAME TYPE fast kubernetes.io/gce-pd standard(default) kubernetes.io/gce-pd

注意 我们使用 SC 作为 storageclass 的简写。

除了你自己创建的 fast 存储类,还存在 standard 存储类并标记为默认存储类,很快就会知道其义了,让我们列举 举 k8s 中可用的存储类,以便我们进行比较:

$ kubectl get sc NAME TYPE fast k8s.io/minikube hostpath standard (default) k8s.io/minikube-hostpath

再来看看, fast 存储类是由你创建的,并且此处也存在默认的 standard 存储类,比较两个列中的 TYPE 列,你会看到 GKE 正在使用 kubernetes io gee pd 置备程序,而 ku 正在使用 k8s io minikube hostpath

检查默认存储类

使用 kubectl get 查看有关 GKE 集群中标准存储类的更多信息,如下面 的代码清单所示

如果仔细观 察清单 的顶 部,会看 到存储 类定义会包含 个注释,这会使其成为 默认的存储类,如果持久卷声 明没有明确指出 要使 用哪个存储类, 默认存储类会用于动态提供持久卷的内容。

此 PVC 定义仅包含存储大小请求和所需访问模式, 并不包含存储级别。 在创建 PVC 时, 将使用任何标记为默认的存储类。 可以通过如下代码确认:

这最后会告诉我们为什么要在代码清单 6.11 中将 storageClassNarne 设置为一个空字符串(当你想让 PVC 绑定到你手动配置的 PV  时)。 在这里回顾 一下这个PVC 定义的相关行:

如果尚未将 storageClassName 属性设置为空字符串, 则尽管已存在适当的

预配置待久卷, 但动态卷置备程序仍将配置新的持久卷。 此时, 笔者想演示一个声

明如何绑定到手动预先配置的持久卷, 同时不希望置备程序干涉。

提示 如果希望 PVC 使用预先配置的PV, 请将 storageClassName 显式设 置为 "" 。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:sonarqube api接口
下一篇:VM部署实践 02 CI 流水线设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~