一、StorageClass概述

StorageClass 为管理员提供了描述存储 "类" 的方法,实现了存储的动态供给,简单来说,StorageClass能够根据pvc来自动创建pv,减轻了集群管理员创建pv的负担。

创建一个StorageClass需要以下几部分

  • provisioner:StorageClass能够自动创建pv的前提是我们给StorageClass指定一块可以使用的存储,provisioner即定义了StorageClass使用哪块存储。
  • RBAC: 这里定义了StorageClass需要的权限。RBAC相关知识可以参考:https://blog.csdn.net/hszxd479946/article/details/108691533
  • StorageClass: 定义StorageClass存储类,并且说明使用哪一个provisioner

二、创建StorageClass

以下的操作都经过实际测试,如果遇到问题可以留言。

step1:创建RBAC

创建RBAC的yaml文件---rbac.yaml:

apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-client-provisionernamespace: scm-tools #注意修改namespace
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: nfs-client-provisioner-runner
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: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: run-nfs-client-provisioner
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: scm-tools #注意修改namespace
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisionernamespace: scm-tools #注意修改namespace
rules:- apiGroups: [""]resources: ["endpoints"]verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: leader-locking-nfs-client-provisionernamespace: scm-tools #注意修改namespace
subjects:- kind: ServiceAccountname: nfs-client-provisionernamespace: scm-tools #注意修改namespace
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: rbac.authorization.k8s.io

yaml文件就绪之后,执行:

kubectl apply -f rbac.yaml

step2:创建provisioner

创建provisioner的yaml文件---provisioner.yaml:

vim provisioner.yaml

内容如下,重要的地方都做了注释:

apiVersion: apps/v1
kind: Deployment # provisioner的类型是一个deployment
metadata:name: nfs-client-provisionerlabels:app: nfs-client-provisionernamespace: scm-tools # 指定provisioner所属的namespace,改成你自己的namespace
spec:replicas: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisioner # 指定provisioner使用的sacontainers:- name: nfs-client-provisionerimage: vbouchaud/nfs-client-provisioner:latest # 指定provisioner的镜像volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumes # 固定写法env:- name: PROVISIONER_NAMEvalue: scm-storage-class # 指定分配器的名称,创建storageclass会用到- name: NFS_SERVERvalue: 172.16.1.100 # 指定使用哪一块存储,这里用的是nfs,此处填写nfs的地址- name: NFS_PATHvalue: /data # 使用nfs哪一块盘符volumes:- name: nfs-client-rootnfs:server: 172.16.1.100 # 和上面指定的nfs地址保持一致path: /data # 和上面指定的盘符保持一致

provisioner.yaml就绪之后,执行:

kubectl apply -f provisioner.yaml

查看provisioner的状态:

[root@scm-master demo_02]# kubectl get deploy -n scm-tools
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
nfs-client-provisioner   1/1     1            1           45h

如果READY一直是0/1,执行以下命令查看报错信息:

kubectl describe deploy nfs-client-provisioner -n ${你的namespace名称}

step3:创建storageclass

准备StorageClass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: scm-storage # storageclass的名字
provisioner: scm-storage-class # 必须与provisioner.yaml中PROVISIONER_NAME的值一致
parameters:archiveOnDelete: "false"

StorageClass.yaml就绪后,执行:

kubectl apply -f StorageClass.yaml

查看已创建的StorageClass:

[root@scm-master demo_02]# kubectl get sc  | grep scm-storage
scm-storage                        scm-storage-class           45h

step4: 创建一个pvc进行测试,检查StorageClass是否自动创建了pv

准备pvc的yaml文件---scm-pvc.yaml:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: scm-pvcnamespace: scm-tools
spec:storageClassName: scm-storage # 需要与上面创建的storageclass的名称一致accessModes:- ReadWriteOnceresources:requests:storage: 10Gi

scm-pvc.yaml文件就绪后,执行:

kubectl apply -f scm-pvc.yaml

查看pvc的情况:

[root@scm-master pv_test]# kubectl get pvc -n scm-tools
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
scm-pvc   Bound    pvc-13c656a9-a6fb-497c-8156-85c084d4a26a   10Gi       RWO            scm-storage    9s

pvc的状态显示为Bound,表示我们的StorageClass功能正常,至此StorageClass就算创建完成啦。

如果pvc的状态是Pending或者其他状态,执行以下命令查看异常原因:

kubectl describe pvc scm-pvc -n ${你的namespace名称}

kubernetes-StorageClass介绍相关推荐

  1. kubernetes 入门介绍

    这里写目录标题 1. kubernetes 入门介绍 1.1. 发展历程 1.2. 竞争对手 1.3. k8s 概述 1.4. k8s 功能 1.4.1. 自动装箱 1.4.2. 自我修复 (自愈能力 ...

  2. kubernetes基础介绍及kubectl常用命令

    kubernetes基础介绍及kubectl常用命令 k8s的pod分类 自主式pod 控制器管理的pod 核心主键 HPA service 网络模型 同节点Pod之间的通信 不同节点上的Pod通信 ...

  3. Kubernetes持久化存储PV、PVC和StorageClass介绍

    PV和PVC Kubernetes Volume提供了非常好的数据持久化方案,不过对于大型Kubernetes集群来说管理上还有不方便之处.Volume方案需要创建Pod或者Deployment的管理 ...

  4. kubernetes组件介绍

    目录 1.前言 2.k8s简介 3.master 3.1 kubernetes Scheduler 简介 3.2 Controller Manager简介 4.Node 1.前言 为什么要用 Kube ...

  5. Kubernetes CSI 介绍及使用

    CSI 介绍及使用 和 Flexvolume 类似,CSI 也是为第三方存储提供数据卷实现的抽象接口. 有了 Flexvolume,为何还要 CSI 呢? Flexvolume 只是给 kuberne ...

  6. 云原生-Kubernetes Pod 介绍

    Pod 直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起 就是豆荚(一个 Pod).在 k8s 中我们不会直接操作容器,而是把容器包装成 Pod 再进行管 理. 一. Po ...

  7. 【Kubernetes系列】Kubernetes组件介绍

    概述 kubernetes中文文档:https://kubernetes.io/zh/docs/home/ kubernetes中文社区:https://www.kubernetes.org.cn/d ...

  8. kubernetes(k8s)-介绍2

    kubernetes(k8s)-安装(二) 什么是Kubernetes Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构. 使用Kuber ...

  9. Kubernetes Events介绍(下)

    https://www.kubernetes.org.cn/1195.html 经过前两回的"踏血寻妖",一个完整的Events原形逐渐浮出水面.我们已经摸清了它的由来和身世,本回 ...

  10. VMware Tanzu Kubernetes Grid介绍

    VMware Tanzu Kubernetes Grid(以下简称TKG)是一个按照V公司的想法提供了一致的,上游兼容的区域性Kubernetes基础架构,TKG为最终用户工作负载和生态系统集成做好底 ...

最新文章

  1. java pagemodel,Java PageModel
  2. Spring Data JPA 常用注解
  3. 对mysql日志进行操作的总结包括 启用,过期自动删除 等
  4. arcgis 属性表 汇总_ArcGIS实践教程(19)ArcGIS/ArcMap中属性表的合并方法
  5. (27)FPGA面试技能提升篇(UVM、VMM)
  6. IE, Firefox, Chrome共同的保存图片bug? 求助。
  7. 10、I/O 输入输出流
  8. win10如何还原计算机名,win10电脑一键还原教程
  9. 如何去实现机械灵巧手玩魔方和弹钢琴_我学会了玩魔方
  10. 【黄啊码】vue配合PHP实现导出excel进度条显示
  11. 认知服务调用如何使用图片的DataURL
  12. web概念、B/C、C/S区别与优缺点以及网络通信三要素:IP、端口号、传输地址
  13. python设置word背景色_Java 给Word不同页面设置不同背景
  14. setResulttransformer过期NativeQueryImpl,cannot be cast to org.hibernate.query.internal.NativeQueryImpl
  15. 第四章 语料库与语言知识库
  16. c语言数学语文英语成绩编程,输入10名学生的序号和每个学生三门功课(数学、英语、C语言程序设计)的成绩,编程计算出每个学生的总分...
  17. 阿里云轻量应用服务器流量计算方法
  18. 用 navicat 导出设计表表结构
  19. Simulink —— 三相交流控制系统中的坐标变换
  20. 配置及执行spark、hadoop遇到的几个报错解决

热门文章

  1. 压敏电阻的作用有哪些?
  2. PostgreSQL - 如何杀死被锁死的进程
  3. Java中Date日期时间的工具类
  4. 环境变量用来保存java虚拟机_____环境变量用来存储Java的编译和运行工具所在的路径,而____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。(填英文)...
  5. 二进制、八进制、十进制、十六进制的英文及简写
  6. 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。
  7. linux 出现running guests on default URT情况解决
  8. 虚拟机关机出现shutting down... running guests on default URT
  9. php 合成微信头像,PHP 图片合成、仿微信群头像的方法示例
  10. 体育竞技游戏的团队AI