【Kubernetes存储篇】StorageClass存储类动态生成PV详解

news2024/11/16 1:50:59

文章目录

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

一、StorageClass存储类理论

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

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

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

卷插件内置制备器配置示例
AWSElasticBlockStoreAWS EBS
AzureFileAzure File
AzureDiskAzure Disk
CephFS--
CinderOpenStack Cinder
FC--
FlexVolume--
GCEPersistentDiskGCE PD
iSCSI--
NFS-NFS
RBDCeph RBD
VsphereVolumevSphere
PortworxVolumePortworx 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-provisioner
  replicas: 1
  strategy:        # 更新策略
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-provisioner
    spec:
      serviceAccount: nfs-provisioner   # 指定SA账号
      containers:
        - name: nfs-provisioner
          image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: example.com/nfs     # NFS供应商名称
            - name: NFS_SERVER
              value: 16.32.15.200         # NFS服务端地址
            - name: NFS_PATH            
              value: /data/nfs_pro/      # NFS共享目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: 16.32.15.200           # NFS服务端地址
            path: /data/nfs_pro/          # NFS共享目录

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UBtPcvv2-1686488952208)(D:\MD归档文档\IMG\image-20230611205737012.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjJI0M9K-1686488952209)(D:\MD归档文档\IMG\image-20230611205820108.png)]

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

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

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbmDzy3r-1686488952210)(D:\MD归档文档\IMG\image-20230611210021158.png)]

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

5、创建Pod挂载PVC

cat nfs-pod-demo.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: nfs-pod-demo
  labels:
    type: nfs
spec:
  volumes:
  - persistentVolumeClaim: 
      claimName: storageclass-pvc-demo   # 指定PVC
    name: nfs-storage                    # 卷名称
  containers:
  - name: nfs-pod-demo
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: nfs-storage                 # 指定上面卷名称
      mountPath: /usr/share/nginx/html  # 容器挂载目录

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v9i5jyk0-1686488952210)(D:\MD归档文档\IMG\image-20230611210748889.png)]

在 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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-umtlS7vW-1686488952210)(D:\MD归档文档\IMG\image-20230611210840495.png)]

三、步骤总结

1、搭建NFS服务端

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

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

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

5、创建Pod,使用PVC

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

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

相关文章

web测试工程师的工作职责

web测试工程师的工作职责1 职责: 1、 负责数据平台产品的测试工作,参与产品需求分析,负责方案制定,并能预先评估项目风险,确保测试活动的顺利开展; 2、 深入理解系统内部的设计原理,并能从测试的角度提供优化意见; 3、 根据产品需…

LVS+Keepalived 高可用群集实战部署

目录 前言 一、Keepalived工具介绍 1、Keepalived的作用 2、 Keepalived体系主要模块 二、keepalived工作原理 1、VRRP (虚拟路由冗余协议) 2、VRRP (虚拟路由冗余协议) (1)keepalived.conf是主配置文…

qt 使用qtpdfium实现读取pdf文件

此处仅作为笔记和配置指导。 要想获取源码可Git hub上下载,这里推荐一个:QtPdfium_Build_Source: 基于Google pdfium 库,可编译和编译好的Qtpdfium 库,用于加载pdf文件进行预览 (gitee.com) 目前小编根据推荐的编译方法&#xf…

STM32F0实现数字化SPWM纯正弦波逆变器

一、理论基础 所谓SPWM,就是通过只有开关两个状态(离散,数字的)的PWM序列产生正弦波(连续,模拟的)的方法。其理论基础一句话就能说明白:冲量相等而形状不同的窄脉冲加在具有惯性的环…

golang语法的注意事项

目录 1.源文件以.go结尾2.过文件只能存在一个mian 函数 (入口函数)3. go严格区分大小写4. golang的每行代码是一个语句 默认存在 ; 不需要自己写了5. golang 是每一行每一行的执行的 不要把多个语句写在一行6. 定义变量 或是导入的包未使用 无法同过编译7. {} 都是成对出现 为了…

Xtrak 塔克小车巡线代码以及红绿灯识别相关小改动

做的小改动: 只更改了xtark_follow_line.py 增加了一次HSV分割来做红绿灯识别(建议到时候用手机或者平板显示红色或者绿色图片),红绿图片: 将检测道路位置的方式从重心变为最接近屏幕中心的道路像素点。 检测不到道路之…

ubuntu 22.04部署dzzoffice及安装onlyoffice插件

目录 一、配置阿里源 二、安装数据库 三、安装依赖组件 (一)安装php7.4 (二)安装apache2 四、下载 dzzoffice 五、安装dzzoffice 六、安装onlyoffice插件 (一)从github下载小胡版onlyoffice替代原来…

如何学习及计算机编程,入门看这一篇就够了---以c语言为例

信息时代,计算机变成不再是专业性很强的一门学科,更多的是变成了一种工具 用计算机爬取信息(爬虫)进行数据分析,数据可视化(大数据的某个方面)处理海量的数据,如excel(百…

声音生成项目(4)——从VariantAutoencoder(VAE)到VQ-VAE矢量量化变分编码器

文章目录 论文介绍步骤具体讲解自定义矢量量化层获取最近距离的码字的索引计算推导损失函数相关参考 矢量量化层的代码实现完整代码实现 论文介绍 不同于变分编码器和自动编码器,vq-vae中的latent space是离散的,并不是连续的,这能够避免后验…

第3章“程序的机器级表示”:理解指针

指针是 C 语言的一个重要特色。它们提供一种统一方式,能够远程访问数据结构。 指针基本的概念其实非常简单,下面的代码说明了许多这样的概念: struct str { /* Example Structure */int t;char v; };union uni { /* Example Union */int t;…

大厂C++面试基础题第1辑——虚函数七题精讲之一

> “虚函数的作用” 是面向对象的C编程最基础也最核心的知识点,如果不能无法正确回答本题,则只此一题,不管大厂还是小厂,都铁定无缘了。 概述 “虚函数” 是 C面向对象三最:最基础、最重要、最关键的知识点。我们从…

什么是Vue的Vite构建工具?如何使用Vite进行项目开发

什么是Vue的Vite构建工具?如何使用Vite进行项目开发 介绍 Vite是一个由Vue.js核心团队开发的构建工具。它的目标是提供一种快速的开发体验,同时保持生产环境的稳定性和可靠性。Vite使用了ES模块作为开发环境的原生模块格式,通过在开发服务器…

C++11中的关键字constexpr

文章目录 1、constexpr修饰普通变量2、constexpr修饰函数3、constexpr修饰类的构造函数 constexpr 关键字的功能是使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。C 11 标准中,constexpr 可用于修饰普通变量、函数&…

【Leetcode】DP | 序列及子数组问题

300 最长递增子序列 求数组最长严格递增子序列的长度。 D [ i ] D[i] D[i]代表以 n u m s [ i ] nums[i] nums[i]结尾的最长递增子序列的长度。 D [ i ] max ⁡ j < i , n u m s [ i ] > n u m s [ j ] ( D [ j ] 1 ) D[i] \max_{j < i,\ nums[i]>nums[j]}(D[…

什么是Vue的UI框架?

什么是Vue的UI框架&#xff1f; Vue.js 是一款流行的 JavaScript 框架&#xff0c;用来构建现代的单页面应用程序&#xff08;SPA&#xff09;。Vue.js 提供了丰富的功能和 API&#xff0c;但是在构建应用程序时&#xff0c;我们还需要使用一些 UI 组件来实现复杂的交互和界面…

【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

02- 输入、输出及运算符(C语言)

一 输入、输出 1.1 输出函数 printf 函数是一个可变参数函数&#xff0c;参数的个数不定&#xff1a;int printf(const char *format, ...) printf("%d\n", x); printf("%d %d\n", x, y); 1.2 输入函数 1.2.1 scanf函数&#xff1a;int scanf(const …

利用AI点亮副业变现:5个变现实操案例的启示

AI变现副业实操案例 宝宝起名服务AI科技热点号头像壁纸职业头像收徒&#xff1a;萌娃头像定制头像平台挂载 小说推广号流量营销号百家号AI共创计划公众号流量主 知识付费知识星球小报童&#xff1a; 整体思维导图&#xff1a; 在这里先分享五个实操案例: 宝宝起名服务AI科技热…

[MySQL]一文带你学明白数据库控制语言——DCL

前言 嗨咯&#xff0c;小伙伴大家好呀&#xff01;好几天没见了&#xff0c;周末过得怎么样啊&#xff01;之前学过的SQL语句不会都忘了吧。如果忘了的话大家可以看一下前几期的文章。本期要学习的是SQL语句中的数据库控制语句——DCL&#xff0c;学习完毕之后MySQL中的SQL语句…

探索ll-hls低延迟直播协议

HLS全称为HTTP Live Streaming&#xff0c;其中m3u8作为描述协议&#xff0c;指向一系列切片文件。支持多码流与自适应码率&#xff0c;支持广告无缝播放&#xff0c;支持CMAF协议的低延时直播&#xff0c;也支持CDN动态选择。 我们先看下HLS整体架构&#xff0c;由三部分构成…