前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【K8s】Kubernetes 存储之 StorageClass

【K8s】Kubernetes 存储之 StorageClass

作者头像
行者Sun
发布2024-09-11 18:44:51
1370
发布2024-09-11 18:44:51
举报
文章被收录于专栏:Kubernetes

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~

基本介绍

在 Kubernetes 中,StorageClass(存储类,SC)是一种与存储相关、用于定义存储卷驱动器的资源对象,并可以根据 PVC 对象的申请动态创建 PV 对象。

StorageClass 可以定义的特性包括:

  • 存储类型(如 SSD、HDD)
  • 访问模式(如 ReadWriteOnce、ReadWriteMany、ReadOnlyMany)
  • 存储卷绑定模式(如 Immediate、WaitForFirstConsumer)
  • 存储卷扩展策略
  • 存储卷的回收策略

工作原理

  • 定义对象:管理员可以在 Kubernetes 集群中定义一个或多个 StorageClass 对象
  • 动态卷供应:当用户创建 PVC 对象时,如果 PVC 指定了 StorageClass 的名称,Kubernetes 会自动使用相应的 StorageClass 来动态创建一个 PV 对象
  • 驱动器插件:StorageClass 指定一个驱动器插件,它是一个外部服务,负责创建、删除、扩展和回收卷,如 nfs-client-provisioner
  • 存储卷绑定:Kubernetes 会根据 StorageClass 定义的绑定模式,Kubernetes 可以立即绑定卷,或者等待 Pod 首次使用卷时再绑定
  • 存储卷回收:当 PVC 被销毁时,Kubernetes 会根据 StorageClass 定义的回收策略,驱动器可以保留、删除或回收卷

资源清单(示例)

代码语言:javascript
复制
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-nfs-storage
  namespace: kube-system
provisioner: provisioner/nfs                # provisioner的值一定要和 ROVISIONER_NAME 这个环境变量的值一样
parameters:
  type: pd-standard
reclaimPolicy: Delete                       # 回收策略,仅支持 Retain / Delete
volumeBindingMode: Immediate                # 该字段表示立即绑定
allowVolumeExpansion: true                  # 该字段表示允许动态扩容
 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  namespace: kube-system
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: eipwork/nfs-client-provisioner:v3.1.0-k8s1.11
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: provisioner/nfs        # 定义PROVISIONER_NAME环境变量的值
            - name: NFS_SERVER
              value: NFS_SVR                # 修改IP(同样适用于NAS存储,这里改为NAS存储的地址)
            - name: NFS_PATH
              value: /data/nfs              # 修改NFS目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: NFS_SVR                 # 修改IP(同样适用于NAS存储,这里改为NAS存储的地址)
            path: /data/nfs                 # 修改NFS目录
 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  namespace: kube-system
 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: nfs-client-provisioner
  namespace: kube-system
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

相关说明

1、存储卷绑定模式

  • Immediate:创建后立即绑定存储卷
  • WaitForFirstConsumer:等待 Pod 首次使用存储卷时绑定

2、存储卷回收策略

  • Retain:保留策略,该策略允许保留存储卷,但不可以再次被新创建的 PVC 对象绑定
  • Delete:删除策略(默认),该策略不保留存储卷

3、存储卷自动扩容

在 StorageClass 对象中添加以下配置,即可在 PV 对象已使用容量达到预设 Capacity 后,可以自动扩容

代码语言:javascript
复制
allowVolumeExpansion: true
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实施运维知识交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档