kubernetes-StorageClass介绍
一、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介绍相关推荐
- kubernetes 入门介绍
这里写目录标题 1. kubernetes 入门介绍 1.1. 发展历程 1.2. 竞争对手 1.3. k8s 概述 1.4. k8s 功能 1.4.1. 自动装箱 1.4.2. 自我修复 (自愈能力 ...
- kubernetes基础介绍及kubectl常用命令
kubernetes基础介绍及kubectl常用命令 k8s的pod分类 自主式pod 控制器管理的pod 核心主键 HPA service 网络模型 同节点Pod之间的通信 不同节点上的Pod通信 ...
- Kubernetes持久化存储PV、PVC和StorageClass介绍
PV和PVC Kubernetes Volume提供了非常好的数据持久化方案,不过对于大型Kubernetes集群来说管理上还有不方便之处.Volume方案需要创建Pod或者Deployment的管理 ...
- kubernetes组件介绍
目录 1.前言 2.k8s简介 3.master 3.1 kubernetes Scheduler 简介 3.2 Controller Manager简介 4.Node 1.前言 为什么要用 Kube ...
- Kubernetes CSI 介绍及使用
CSI 介绍及使用 和 Flexvolume 类似,CSI 也是为第三方存储提供数据卷实现的抽象接口. 有了 Flexvolume,为何还要 CSI 呢? Flexvolume 只是给 kuberne ...
- 云原生-Kubernetes Pod 介绍
Pod 直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起 就是豆荚(一个 Pod).在 k8s 中我们不会直接操作容器,而是把容器包装成 Pod 再进行管 理. 一. Po ...
- 【Kubernetes系列】Kubernetes组件介绍
概述 kubernetes中文文档:https://kubernetes.io/zh/docs/home/ kubernetes中文社区:https://www.kubernetes.org.cn/d ...
- kubernetes(k8s)-介绍2
kubernetes(k8s)-安装(二) 什么是Kubernetes Kubernetes是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构. 使用Kuber ...
- Kubernetes Events介绍(下)
https://www.kubernetes.org.cn/1195.html 经过前两回的"踏血寻妖",一个完整的Events原形逐渐浮出水面.我们已经摸清了它的由来和身世,本回 ...
- VMware Tanzu Kubernetes Grid介绍
VMware Tanzu Kubernetes Grid(以下简称TKG)是一个按照V公司的想法提供了一致的,上游兼容的区域性Kubernetes基础架构,TKG为最终用户工作负载和生态系统集成做好底 ...
最新文章
- java pagemodel,Java PageModel
- Spring Data JPA 常用注解
- 对mysql日志进行操作的总结包括 启用,过期自动删除 等
- arcgis 属性表 汇总_ArcGIS实践教程(19)ArcGIS/ArcMap中属性表的合并方法
- (27)FPGA面试技能提升篇(UVM、VMM)
- IE, Firefox, Chrome共同的保存图片bug? 求助。
- 10、I/O 输入输出流
- win10如何还原计算机名,win10电脑一键还原教程
- 如何去实现机械灵巧手玩魔方和弹钢琴_我学会了玩魔方
- 【黄啊码】vue配合PHP实现导出excel进度条显示
- 认知服务调用如何使用图片的DataURL
- web概念、B/C、C/S区别与优缺点以及网络通信三要素:IP、端口号、传输地址
- python设置word背景色_Java 给Word不同页面设置不同背景
- setResulttransformer过期NativeQueryImpl,cannot be cast to org.hibernate.query.internal.NativeQueryImpl
- 第四章 语料库与语言知识库
- c语言数学语文英语成绩编程,输入10名学生的序号和每个学生三门功课(数学、英语、C语言程序设计)的成绩,编程计算出每个学生的总分...
- 阿里云轻量应用服务器流量计算方法
- 用 navicat 导出设计表表结构
- Simulink —— 三相交流控制系统中的坐标变换
- 配置及执行spark、hadoop遇到的几个报错解决
热门文章
- 压敏电阻的作用有哪些?
- PostgreSQL - 如何杀死被锁死的进程
- Java中Date日期时间的工具类
- 环境变量用来保存java虚拟机_____环境变量用来存储Java的编译和运行工具所在的路径,而____环境变量则用来保存保存Java虚拟机要运行的“.class”文件路径。(填英文)...
- 二进制、八进制、十进制、十六进制的英文及简写
- 本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。
- linux 出现running guests on default URT情况解决
- 虚拟机关机出现shutting down... running guests on default URT
- php 合成微信头像,PHP 图片合成、仿微信群头像的方法示例
- 体育竞技游戏的团队AI