【Kubernetes】存储类StorageClass

存储类StorageClass

  • 一、StorageClass介绍
  • 二、安装nfs provisioner,用于配合存储类动态生成pv
    • 2.1、创建运行nfs-provisioner需要的sa账号
    • 2.2、对sa授权
    • 2.3、安装nfs-provisioner程序
  • 三、创建storageclass,动态供给pv
  • 四、创建pvc,通过storageclass动态生成pv
  • 五、创建pod,挂载storageclass动态生成的pvc

一、StorageClass介绍

之前介绍的PV和PVC模式都是需要先创建好PV,然后定义好PVC和pv进行一对一的Bond,但是如果PVC请求成千上万,那么就需要创建成千上万的PV,对于运维人员来说维护成本很高,

Kubernetes提供一种自动创建PV的机制,叫StorageClass,它的作用就是创建PV的模板。k8s集群管理员通过创建storageclass可以动态生成一个存储卷pv供k8s pvc使用。

具体来说,StorageClass会定义以下两部分:
=========
1、PV的属性 ,比如存储的大小、类型等;
2、创建这种PV需要使用到的存储插件,比如Ceph、NFS等
=========
有了这两部分信息,Kubernetes就能够根据用户提交的PVC,找到对应的StorageClass,然后Kubernetes就会调用 StorageClass声明的存储插件,创建出需要的PV。

查看定义的storageclass需要的字段:kubectl explain storageclass
每个StorageClass都包含字段provisioner,parameters和reclaimPolicy

[root@master 10]# kubectl explain storageclass
KIND:     StorageClass
VERSION:  storage.k8s.io/v1
DESCRIPTION:StorageClass describes the parameters for a class of storage for whichPersistentVolumes can be dynamically provisioned.StorageClasses are non-namespaced; the name of the storage class accordingto etcd is in ObjectMeta.Name.
FIELDS:allowVolumeExpansion	<boolean>allowedTopologies	<[]Object>apiVersion	<string>kind	<string>metadata	<Object>mountOptions	<[]string>parameters	<map[string]string>  # 键值对类型provisioner	<string> -required-  # 供应商reclaimPolicy	<string>         # 回收策略volumeBindingMode	<string>

provisioner:供应商,storageclass需要有一个供应者,用来确定我们使用什么样的存储来创建pv,常见的provisioner:(https://kubernetes.io/zh/docs/concepts/storage/storage-classes/)
provisioner既可以由内部供应商提供,也可以由外部供应商提供,如果是外部供应商可以参考https://github.com/kubernetes-incubator/external-storage/下提供的方法创建。
https://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner

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

allowVolumeExpansion:允许卷扩展,PersistentVolume 可以配置成可扩展。将此功能设置为true时,允许用户通过编辑相应的 PVC 对象来调整卷大小。当基础存储类的allowVolumeExpansion字段设置为 true 时,以下类型的卷支持卷扩展。

在这里插入图片描述

注意:此功能仅用于扩容卷,不能用于缩小卷。

二、安装nfs provisioner,用于配合存储类动态生成pv

将nfs-subdir-external-provisioner.tar.gz上传到工作节点node01和node02上,然后手动解压。

[root@node01 ~]#  ctr -n=k8s.io images import  nfs-subdir-external-provisioner.tar.gz
unpacking registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0 (sha256:69b08b256d7e9f5823cf09dece7eabf025cc60c652e4ae08201978bb2862a276)...done
You have new mail in /var/spool/mail/root
[root@node02 ~]#  ctr -n=k8s.io images import  nfs-subdir-external-provisioner.tar.gz
unpacking registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0 (sha256:69b08b256d7e9f5823cf09dece7eabf025cc60c652e4ae08201978bb2862a276)...done
You have new mail in /var/spool/mail/root

2.1、创建运行nfs-provisioner需要的sa账号

[root@master 11]# cat serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: nfs-provisioner
[root@master 11]# kubectl apply -f serviceaccount.yaml
serviceaccount/nfs-provisioner created
[root@master 11]# kubectl get sa
NAME              SECRETS   AGE
default           0         5d13h
nfs-provisioner   0         21s

扩展:什么是sa?

sa的全称是serviceaccount。
serviceaccount是为了方便Pod里面的进程调用Kubernetes API或其他外部服务而设计的。
指定了serviceaccount之后,我们把pod创建出来了,我们在使用这个pod时,这个pod就有了我们指定的账户的权限了。

2.2、对sa授权

[root@master 11]# kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding  --clusterrole=cluster-admin  --serviceaccount=default:nfs-provisioner
clusterrolebinding.rbac.authorization.k8s.io/nfs-provisioner-clusterrolebinding created

2.3、安装nfs-provisioner程序

[root@master 11]# cat /etc/exports
/data/volumes 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v1 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v2 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v3 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v4 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v5 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v6 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v7 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v8 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v9 10.32.1.147/24(rw,no_root_squash)
/data/volume_test/v10 10.32.1.147/24(rw,no_root_squash)
/data/nfs_pro 10.32.1.147/24(rw,no_root_squash)
[root@master 11]# exportfs -arv
exporting 10.32.1.147/24:/data/nfs_pro
exporting 10.32.1.147/24:/data/volume_test/v10
exporting 10.32.1.147/24:/data/volume_test/v9
exporting 10.32.1.147/24:/data/volume_test/v8
exporting 10.32.1.147/24:/data/volume_test/v7
exporting 10.32.1.147/24:/data/volume_test/v6
exporting 10.32.1.147/24:/data/volume_test/v5
exporting 10.32.1.147/24:/data/volume_test/v4
exporting 10.32.1.147/24:/data/volume_test/v3
exporting 10.32.1.147/24:/data/volume_test/v2
exporting 10.32.1.147/24:/data/volume_test/v1
exporting 10.32.1.147/24:/data/volumes
[root@master 11]# 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-provisionercontainers:- 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- name: NFS_SERVERvalue: 10.32.1.147- name: NFS_PATHvalue: /data/nfs_pro/volumes:- name: nfs-client-rootnfs:server: 10.32.1.147path: /data/nfs_pro/
[root@master 11]# kubectl apply -f nfs-deployment.yaml
deployment.apps/nfs-provisioner created
[root@master 11]# kubectl get pods | grep nfs
nfs-provisioner-d5bd78f66-56ccg   1/1     Running   0             6s

三、创建storageclass,动态供给pv

[root@master 11]# cat nfs-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs
provisioner: example.com/nfs
[root@master 11]# kubectl apply -f nfs-storageclass.yaml
storageclass.storage.k8s.io/nfs created
[root@master 11]# kubectl get storageclass
NAME   PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs    example.com/nfs   Delete          Immediate           false                  22s
# 显示内容如上,说明storageclass创建成功了

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

env:- name: PROVISIONER_NAMEvalue: `example.com/nfs`

四、创建pvc,通过storageclass动态生成pv

[root@master 11]# cat claim.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: test-claim1
spec:accessModes:  ["ReadWriteMany"]resources:requests:storage: 1GistorageClassName:  nfs
[root@master 11]# kubectl apply -f claim.yaml
persistentvolumeclaim/test-claim1 created
# 查看是否动态生成了pv,pvc是否创建成功,并和pv绑定
[root@master 11]# kubectl get pvc
NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-claim1   Bound    pvc-6ecea632-e5ff-4ef9-99df-33638fe90a1c   1Gi        RWX            nfs            13s
# 通过上面可以看到test-claim1的pvc已经成功创建了,绑定的pv是pvc-6ecea632-e5ff-4ef9-99df-33638fe90a1c 
# 这个pv是由storageclass调用nfs provisioner自动生成的。

步骤总结:

  • 1、供应商:创建一个nfs provisioner
  • 2、创建storageclass,storageclass指定刚才创建的供应商
  • 3、创建pvc,这个pvc指定storageclass

五、创建pod,挂载storageclass动态生成的pvc

[root@master 11]# cat read-pod.yaml
kind: Pod
apiVersion: v1
metadata:name: read-pod
spec:containers:- name: read-podimage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-pvcmountPath: /usr/share/nginx/htmlrestartPolicy: "Never"volumes:- name: nfs-pvcpersistentVolumeClaim:claimName: test-claim1
[root@master 11]# kubectl apply -f read-pod.yaml
pod/read-pod created
[root@master 11]# kubectl get pods | grep read
read-pod                          1/1     Running   0             16s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/215618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql:用SHOW COLUMNS FROM显示一个表的列信息

可以使用命令SHOW COLUMNS FROM table_name;显示一个表的列信息&#xff0c;例如&#xff1a;

Java se的语言特征之多态

目录 满足多态的条件动态绑定第一步动态绑定第二步动态绑定第三步参数列表,返回类型,访问修饰限定符区别有动态绑定,那是不是有静态绑定向下转型抽象类接口实现多个接口(先继承再接口,接口用",") 满足多态的条件 定义:去完成某个状态的时候,当不同的对象去完成的时候…

36V H 桥有刷直流驱动芯片GC8870 GC8871 GC8872的数据选型分析

36V H 桥驱动芯片GC8870 GC8871 GC8872都可替代TI的DRV8870/8871/8872&#xff0c;宽电压&#xff0c;内置电荷泵&#xff0c;短地短电源保护&#xff0c;限流等功能&#xff0c;可应用于水泵&#xff0c;扫地机器人&#xff0c;开关等产品中

数据库系统 --- 关系模型

一、关系模型的数据结构以及形式化定义 1.关系 域&#xff1a;一组具有相同数据结构的值的集合。 笛卡尔积&#xff1a;域上的一种集合运算。多个集合做笛卡尔积的结果是每个集合取一个元素组合得到的一个新的集合。 域的基数&#xff1a;一个域上允许的不同取值的个数。 关系&…

护眼台灯为什么护眼?适合备考使用的台灯推荐

台灯是大家生活中必不可少的一盏灯具&#xff0c;尤其是当夜幕降临时&#xff0c;许多仍然需要工作、或者学习的人&#xff0c;都要使用台灯来提供充足的照明环境。如今随着生活的高度发展&#xff0c;大家对台灯的要求也愈发精进了一步&#xff0c;不仅需要能够提供照明的&…

报表控件FastReport .NET v2024功能演示—更改图图片形状

报表生成器FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体的全功能报告库。使用FastReport .NET&#xff0c;您可以创建独立于应用程序的.NET报告。 FastReport .net下载&#xff08;qun&#xff1a;585577353&#xff09;https://www.e…

配电箱安全检查

配电箱怎么检查&#xff0c;如何识破电箱安全隐患&#xff1f; &#xff08;1&#xff09;一物一码&#xff1a;每个配电箱都有独一无二标识二维码&#xff0c;巡检人员到达现场扫码即可填写巡检记录&#xff0c;查看配电箱的参数、负责人、操作规则等信息&#xff1b; &#x…

如何用PHP写一个1688平台下的商品API接口代码?

一 定义 PHP&#xff08;全称&#xff1a;Hypertext Preprocessor&#xff09;是一种广泛用于开发Web应用程序的服务器端脚本语言。它是一种开源的编程语言&#xff0c;特别适用于快速构建动态网页和Web应用程序。 在PHP中&#xff0c;您可以使用1688商品API接口来获取和操作…

韵达速递查询,韵达速递单号查询,对需要的单号记录进行标记

批量查询韵达速递单号的物流信息&#xff0c;对需要的单号记录进行标记。 所需工具&#xff1a; 一个【快递批量查询高手】软件 韵达速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角…

starknet学习资料汇集这一篇就够了(持续更新)

文章目录 官方资料wtf starknet学习资料Starknet Astro 社区官方资料 starknet-foundry 官方github:https://github.com/foundry-rs/starknet-foundry 官方文档:https://foundry-rs.github.io/starknet-foundry/ https://book.cairo-lang.org/zh-cn/index.html https://boo…

银行如何筛选跨网文件交换产品,提升业务效率?

银行业在我国经济发展和社会运转中承载着举足轻重的作用和意义&#xff0c;进入互联网时代&#xff0c;网络的运算和数据管理能力助力银行业高速发展&#xff0c;但同样带来了一些网络安全隐患&#xff0c;网络攻击、数据窃取、敏感信息泄露等问题影响着银行业的根基。为响应和…

python作业题百度网盘,python123作业答案

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python作业题百度网盘&#xff0c;python123作业答案&#xff0c;今天让我们一起来看看吧&#xff01; 完整项目分享&#xff1a; 链接: https://pan.baidu.com/s/1CTMOgLYteLrWRaRnouB0SQ?pwd12hf 提取码: 12hf &…

[Linux 基础] Linux使用git上传gitee三板斧

文章目录 1、使用git1.1 安装git1.2 在Gitee上创建项目1.2.1 使用Gitee创建项目1.2.2 上传本地代码到远端仓库 1.3 git上传三板斧1.3.1 三板斧第一招&#xff1a;git add1.3.2 三板斧第二招&#xff1a;git commit1.3.3 三板斧第三招&#xff1a;git push 1、使用git 1.1 安装…

【教3妹学编程-算法题】下一个更大元素 IV

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开发。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;阳光明媚、万里无云、秋高气爽&#xff0c;适合秋游。 2哥&#x…

商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 鸿鹄云商

鸿鹄云商 SAAS云产品概述 【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多…

MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章&#xff1a;https://arxiv.org/abs/2305.18980 代码&#xff1a;https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det&#xff0c;一种高效的架构和预训练策略&#xff0c;它利用文本描述的…

以csv为源 flink 创建paimon 临时表相关 join 操作

目录 概述配置关键配置测试启动 kyuubi执行配置中的命令 bug解决bug01bug02 结束 概述 目标&#xff1a;生产中有需要外部源数据做paimon的数据源&#xff0c;生成临时表&#xff0c;以使用与现有正式表做相关统计及 join 操作。 环境&#xff1a;各组件版本如下 kyuubi 1.8…

Spring(Spring/Springboot 的创建) 基础

一. Spring 1.1 Spring是什么&#xff1f; Spring 指的是 Spring Frameword(Spring 框架),它是一个开源框架。 Spring 是包含了众多工具方法的IoC容器。 1.2 什么是容器&#xff1f; 容器时用来容纳某种物品的装置。 我们之前接触到的容器&#xff1a; • List/Map ->…

内存cache大量使用问题导致应用异常问题

概述 28s应用崩溃查看内存使用有大量cache。 分析 查看free 信息平时的确存在大量cache使用的情况查看dmes信息发现filesendserver崩溃 崩溃信息为系统调用 查看到page allocation failure:order 5 同时也看到系统内存使用情况 查看到系统实际还有部分内存为空闲内存&am…

[笔记] 使用 qemu/grub 模拟系统启动(单分区)

背景 最近在学习操作系统&#xff0c;需要从零开始搭建系统&#xff0c;由于教程中给的虚拟机搭建的方式感觉还是过于重量级&#xff0c;因此研究了一下通过 qemu 模拟器&#xff0c;配合 grub 完成启动系统的搭建。 qemu 介绍 qemu 是一款十分优秀的系统模拟器&#xff0c;…