【Kubernetes存储篇】StorageClass存储类动态生成PV详解
文章目录
- 一、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详解相关推荐
- MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别
文章目录 MySQL存储引擎InnoDB.MyISAM和MEMORY介绍详解和区别 InnoDB存储引擎 特点 操作示例 创建InnoDB表 修改表引擎为InnoDB MyISAM存储引擎 特点 操作 ...
- k8s教程(Volume篇)-PV详解
文章目录 01 引言 02 PV详解 2.1 示例配置详解 2.1.1 存储容量 (Capacity) 2.1.2 存储卷模式 (Volume Modes) 2.1.3 访问模式 (Access Mo ...
- maven 与intellij IDEA 下maven 为groovy 项目生成jar 详解
2019独角兽企业重金招聘Python工程师标准>>> W7下安装 maven与intellij IDEA 下maven为groovy项目生成jar详解(适合新手) 第一步:下载ma ...
- 【面试篇】ConcurrentHashMap1.7和1.8详解对比
ConcurrentHashMap1.7和1.8详解对比 [面试篇]数据结构-哈希表 [面试篇]HashMap常见面试题目 [面试篇]HashMap1.7和HashMap1.8的详细区别对比 [面试篇 ...
- Python的Django框架中forms表单类的使用方法详解2
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)
AOP 编程 静态代理设计模式 1. 为什么需要代理设计模式 2. 代理设计模式 名词解释 代理开发的核心要素 静态代理编码 静态代理存在的问题 Spring 动态代理开发 搭建开发环境 Spring ...
- Django 基于类的通用视图详解
原文出处:https://segmentfault.com/a/1190000005685454 Django 学习小组:基于类的通用视图详解(一) 通过三周的时间我们开发了一个简单的个人 Blog, ...
- [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解
祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...
- 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
2019独角兽企业重金招聘Python工程师标准>>> 在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码.当前有很多开源框架可以完成这些功能,如A ...
最新文章
- stm32f302实现斩波控制步进电机_什么是步进电机控制器?
- CentOS7搭建LNMP--编译安装
- Android JetPack Lifecycle源码解析
- 【深度学习】利用一些API进行图像数据增广
- Python网络编程:IO多路复用
- Oracle查询表结构的一些相关语句
- Python爬虫入门(1):综述
- 物料帐结算,库存差异为何在下月初冲回
- 小白学编程“Java小白”入门解疑大全
- AMFPHP快速入门
- [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)
- 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
- python web环境傻瓜搭建_Python 环境搭建以及神器推荐,果断收藏!
- python 线程池 锁_python 线程池和锁
- 工商银行Java技术笔试题
- Linux系统工具sar查看主机性能指标(内存、CPU、IO)
- 使用halcon实现3维点云物体与模型的匹配并显示差异
- openshift/origin学习记录(9)——S2I镜像定制(基于Git)
- 苹果手机验真假_朋友说他用手机观察细胞结构,一开始我还以为是开玩笑的……...
- android相机拉伸解决办法