文章目录

  • 一、StorageClass存储类理论
  • 二、案例:Storageclass存储类实战演示
    • 1、搭建NFS服务端
    • 2、搭建NFS供应商(provisioner)
    • 3、创建StorageClass存储类
    • 4、创建PVC,通过StorageClass动态生成PV
    • 5、创建Pod挂载PVC
  • 三、步骤总结

一、StorageClass存储类理论

StorageClass的作用主要有以下几个方面:

  • 动态存储卷分配:StorageClass可以根据定义的属性动态地创建存储卷,无需手动创建和管理存储卷。
  • 存储卷的属性管理:StorageClass可以定义存储卷的属性,如存储类型、存储容量、访问模式等,从而更好地满足应用程序的存储需求。
  • 存储资源的管理:StorageClass可以将存储资源进行分类管理,方便开发者根据应用程序的需求进行选择。

每个 StorageClass 都有一个供应商(Provisioner),用来决定使用哪个卷插件制备 PV。 该字段必须指定,官网提供供应商如下表:

卷插件 内置制备器 配置示例
AWSElasticBlockStore AWS EBS
AzureFile Azure File
AzureDisk Azure Disk
CephFS - -
Cinder OpenStack Cinder
FC - -
FlexVolume - -
GCEPersistentDisk GCE PD
iSCSI - -
NFS - NFS
RBD Ceph RBD
VsphereVolume vSphere
PortworxVolume Portworx Volume
Local - Local

本文章以NFS为例,要想使用NFS,我们需要一个nfs-client的自动装载程序,称之为provisioner,这个程序会使用我们已经配置好的NFS服务器自动创建持久卷,也就是自动帮我们创建PV。

二、案例:Storageclass存储类实战演示

1、搭建NFS服务端

注意:K8S集群所有Node节点都需要安装 nfs-utils

yum -y install nfs-utils
mkdir /data/nfs_pro -p
vim /etc/exports
/data/nfs_pro *(rw,no_root_squash)

加载生效 && 启动NFS服务

exportfs -arv
systemctl enable nfs --now

2、搭建NFS供应商(provisioner)

第一步:创建运行nfs-provisioner需要使用的SA账号

cat nfs-serviceaccount.yaml
---
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-provisioner

执行 YAML 文件 && 查看创建的 SA 账号:

kubectl apply -f nfs-serviceaccount.yaml
kubectl get sa nfs-provisioner

第二步:针对SA账号进行授权:

kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner

第三步:安装nfs-provisioner程序 YAML 如下:

cat nfs-deployment.yaml
---
kind: Deployment
apiVersion: apps/v1
metadata:name: nfs-provisioner
spec:selector:matchLabels:app: nfs-provisionerreplicas: 1strategy:        # 更新策略type: Recreatetemplate:metadata:labels:app: nfs-provisionerspec:serviceAccount: nfs-provisioner   # 指定SA账号containers:- name: nfs-provisionerimage: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0imagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: example.com/nfs     # NFS供应商名称- name: NFS_SERVERvalue: 16.32.15.200         # NFS服务端地址- name: NFS_PATH            value: /data/nfs_pro/      # NFS共享目录volumes:- name: nfs-client-rootnfs:server: 16.32.15.200           # NFS服务端地址path: /data/nfs_pro/          # NFS共享目录

执行YAML 文件 && 查看 Pod状态:

kubectl apply -f nfs-deployment.yaml
kubectl get pods

3、创建StorageClass存储类

cat nfs-storageclass.yaml
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:name: nfs
provisioner: example.com/nfs   # 指定NFS供应商名称,和上面对应上

注意:provisioner处写的 example.com/nfs应该跟安装nfs provisioner时候的env下的PROVISIONER_NAME的value值保持一致。

执行YAML文件 && 查看storageclass 状态:

kubectl apply -f nfs-storageclass.yaml
kubectl get sc nfs

4、创建PVC,通过StorageClass动态生成PV

cat nfs-pvc.yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: storageclass-pvc-demo
spec:accessModes:  ["ReadWriteMany"]resources:requests:storage: 1GistorageClassName:  nfs    # 指定使用storageclass的名称,来自动生产PV

执行YAML 文件 && 查看是否自动生成PV

kubectl apply -f nfs-pvc.yaml
kubectl get pvc

如上图已经自动创建PV,并绑定上PVC了

5、创建Pod挂载PVC

cat nfs-pod-demo.yaml
---
apiVersion: v1
kind: Pod
metadata:name: nfs-pod-demolabels:type: nfs
spec:volumes:- persistentVolumeClaim: claimName: storageclass-pvc-demo   # 指定PVCname: nfs-storage                    # 卷名称containers:- name: nfs-pod-demoimage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-storage                 # 指定上面卷名称mountPath: /usr/share/nginx/html  # 容器挂载目录

执行 YAML 文件 && 查看Pod状态:

kubectl apply -f nfs-pod-demo.yaml
kubectl get pods nfs-pod-demo

在 PVC 绑定宿主机目录,创建 index.html 文件

echo "storageclass demo successd...." > /data/nfs_pro/default-storageclass-pvc-demo-pvc-d4e47c42-d969-44d5-983d-bf36994b6c86/index.html

获取Pod IP访问网站:

kubectl get pods nfs-pod-demo -o wide

三、步骤总结

1、搭建NFS服务端

2、搭建NFS供应商,指定NFS服务端IP地址及共享目录

3、创建StorageClass资源,指定使用NFS供应商

4、创建PVC,使用storageClassName 自动指定使用StorageClass

5、创建Pod,使用PVC

【Kubernetes存储篇】StorageClass存储类动态生成PV详解相关推荐

  1. MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别

    文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...

  2. k8s教程(Volume篇)-PV详解

    文章目录 01 引言 02 PV详解 2.1 示例配置详解 2.1.1 存储容量 (Capacity) 2.1.2 存储卷模式 (Volume Modes) 2.1.3 访问模式 (Access Mo ...

  3. maven 与intellij IDEA 下maven 为groovy 项目生成jar 详解

    2019独角兽企业重金招聘Python工程师标准>>> W7下安装 maven与intellij IDEA 下maven为groovy项目生成jar详解(适合新手) 第一步:下载ma ...

  4. 【面试篇】ConcurrentHashMap1.7和1.8详解对比

    ConcurrentHashMap1.7和1.8详解对比 [面试篇]数据结构-哈希表 [面试篇]HashMap常见面试题目 [面试篇]HashMap1.7和HashMap1.8的详细区别对比 [面试篇 ...

  5. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  6. 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)

    AOP 编程 静态代理设计模式 1. 为什么需要代理设计模式 2. 代理设计模式 名词解释 代理开发的核心要素 静态代理编码 静态代理存在的问题 Spring 动态代理开发 搭建开发环境 Spring ...

  7. Django 基于类的通用视图详解

    原文出处:https://segmentfault.com/a/1190000005685454 Django 学习小组:基于类的通用视图详解(一) 通过三周的时间我们开发了一个简单的个人 Blog, ...

  8. [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解

    祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...

  9. 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

    2019独角兽企业重金招聘Python工程师标准>>> 在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码.当前有很多开源框架可以完成这些功能,如A ...

最新文章

  1. stm32f302实现斩波控制步进电机_什么是步进电机控制器?
  2. CentOS7搭建LNMP--编译安装
  3. Android JetPack Lifecycle源码解析
  4. 【深度学习】利用一些API进行图像数据增广
  5. Python网络编程:IO多路复用
  6. Oracle查询表结构的一些相关语句
  7. Python爬虫入门(1):综述
  8. 物料帐结算,库存差异为何在下月初冲回
  9. 小白学编程“Java小白”入门解疑大全
  10. AMFPHP快速入门
  11. [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)
  12. 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
  13. python web环境傻瓜搭建_Python 环境搭建以及神器推荐,果断收藏!
  14. python 线程池 锁_python 线程池和锁
  15. 工商银行Java技术笔试题
  16. Linux系统工具sar查看主机性能指标(内存、CPU、IO)
  17. 使用halcon实现3维点云物体与模型的匹配并显示差异
  18. openshift/origin学习记录(9)——S2I镜像定制(基于Git)
  19. 苹果手机验真假_朋友说他用手机观察细胞结构,一开始我还以为是开玩笑的……...
  20. android相机拉伸解决办法

热门文章

  1. 使用Frida 实现 Hook 功能
  2. 使用Qt 6.5的Windows 11上的黑暗模式
  3. java规则引擎Aviator
  4. 快门(Shutter)
  5. 计算机图形学(三维对象的实体模型)
  6. PostgreSQL9.4: jsonb 性能测试 - Postgres2015全国用户大会--重磅嘉宾佳作分享(谭峰)
  7. linux alarm 多个,linux中的alarm和 setitimer系统调用
  8. 2022年度大数据服务公司TOP50
  9. 暴笑三国之网虫诸葛亮
  10. 【剑指offer】登峰造极--数组中只出现一次的数字