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

2023-11-15

一、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-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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Kubernetes存储篇】StorageClass存储类动态生成PV详解 的相关文章

随机推荐

  • chooseAddress:fail the api need to be declared in …报错解决方法

    在app js中与pages同级添加 requiredPrivateInfos getFuzzyLocation choosePoi chooseAddress 如果提示无效的json文件 在顶部工具栏 微信开发者工具 检查更新 更新到最新
  • 一致性算法(paxos、raft)

    背景 分布式 一致性模型 1 弱一致性 最终一致性 1 1 DNS 1 1 Gossip 2 强一致性 2 1 同步 2 1 paxos 2 1 raft multi paxos 2 1 ZAB multi paxos 与raft相似 心跳
  • error C2144: 语法错误:“int”的前面应有“;”

    error C2144 语法错误 int 的前面应有 C error C2144 syntax error int should be preceded by 注 我使用VS2010时 遇到的问题 解决办法 在某个 h文件里你自定义的某个类
  • 软件工程的发展历程及展望

    软件工程发展至今 催生出了许多优秀的编程语言和编程思想 本文将带领大家一起了解软件工程经历的四个阶段 汇编语言表达业务逻辑 过程化语言表达业务逻辑 面向对象和模块化思想表达业务逻辑 服务化和组件化表达业务逻辑 最后谈一谈未来可能的发展方式
  • 刷脸支付是新奇的安全的支付体验

    扫脸支付 刷脸付钱的新奇 便利 有效率和安全的支付体验 能够大大提高客户对刷脸商品的和信赖度 刷脸不仅仅在过程中时间 还将吸引消费者注意力的时间延长了5秒到8秒右左 这几秒就会有巨大的商业价值 是让顾客同商家的经营生产有效多维 充分接触的5
  • OSI/RM七层参考模型---开放式的系统互联参考模型

    一 OSI的设计目的 OSI模型的设计目的是成为一个所有销售商都能实现的开放网路模型 来克服使用众多私有网络模型所带来的困难和低效性 OSI是在一个备受尊敬的国际标准团体的参与下完成的 这个组织就是ISO 国际标准化组织 什么是OSI OS
  • 一个很好用的 vue-picker组件

    vue picker a picker componemt for vue2 0 走了一圈 github 都没有找到自己想要的移动端的 vue picker的组件 于是自己就下手 撸了一个出来 感受下效果图 demo demo 地址 htt
  • Gradle查看第三方依赖关系图

    1 使用Android Studio Terminal 配置变量 前提是 java 和 Android Sdk配置正确 java version adb 进行验证 增加 变量名 GRADLE HOME 变量值 D gradle gradle
  • 期货开户不要过度交易

    不同状态下的心态管理 若你在昨日的交易中有所斩获 那恭喜你取得了小阶段的胜利 你可以自信而放松 但却不可忘乎所以 请记得你做出正确决策时的感觉 并重复此状态在你的下一次交易中 只有在交易时集中注意力观察行情变化 勇敢果断地应对突发变化 你才
  • 【笔记】状态同步笔记

    状态同步位置和技能 适用于fps和mmorpg类游戏 客户端A的同步阀值 减少同步量 客户端A本地会存储一份对其他客户端看到的A的预测状态 当本地真实状态和预测状态偏差超过阀值时 则发起同步 同时更新客户端A本地的预测状态 玩家运动的关键点
  • QT学习笔记(六)

    第11章 容器类 Qt提供了自己的容器类 在编写Qt程序时 既可以使用Qt容器 也可以使用STL容器 连续容器 1 向量QVector
  • 计算机丢失d3dx9_41.dll,d3dx9_41.dll

    不知道怎么下载 点我 游戏介绍 d3dx9 41 dll 当运行程序或者游戏时 系统弹出错误提示 找不到 d3dx9 41 dll 或者 没有找到 d3dx9 41 dll 时 说明您系统中缺失这个dll文件或者该dll文件没有被注册 您需
  • “视频云营业厅”-阿里云 mPaaS 加速金融机构数字化转型

    视频云营业厅 发布 蚂蚁 mPaaS 加速金融机构数字化转型 移动终端时代 随着 5G 基础设施的高速发展 AI 技术的日渐成熟 相关政策的鼓励和加持 以及当前疫情大环境的催化 远程无接触的业务办理方式由创新模式快速走向通用 通过多媒体音视
  • Doris数据模型

    目录 基本概念 Aggregate 模型 示例1 导入数据聚合 示例2 保留明细数据 示例3 导入数据与已有数据聚合 Unique 模型 读时合并 与聚合模型相同的实现方式 写时合并 Duplicate 模型 聚合模型的局限性 Unique
  • 【常见错误】UART接收不到数据错误

    利用FPGA控制DAC产生波形的实验 在完成利用FPGA控制DAC的实验中 在对UART发送数据时 显示中断已经打开 但是把数据发送过去时 并没有显示中断 相当于数据知识发送出去 而没有被接收到 经过debug后 发现原来是在硬件中 viv
  • python上传Excel文件

    python上传Excel文件 方法一 直接使用requests的data files参数 方法二 使用MultipartEncoder 方法一 直接使用requests的data files参数 直接上代码吧 def import car
  • python基础(一)

    python基础 1 数据类型 整数 浮点数 字符串 布尔值 True False 注意大小写 空值 是none 列表list 相当于别的语言里的数组 字典 2 编码设置与注释 编码 coding utf 8 注释 使用 或者是 和 这种表
  • redis的编译安装

    下载 http download redis io releases redis 5 0 8 tar gz tar xzvf redis 5 0 8 tar gz cd redis 5 0 8 hadoop node1 redis 5 0
  • 8位二进制数的原码、反码、补码以及它能表示的范围

    1 正数的反码和补码都与原码相同 2 而负数的反码为对该数的原码除符号位外各位取反 3 负数的补码为对该数的原码除符号位外各位取反 然后在最后一位加1 1 原码表示法规定 用符号位和数值表示带符号数 正数的符号位用 0 表示 负数的符号位用
  • 【Kubernetes存储篇】StorageClass存储类动态生成PV详解

    文章目录 一 StorageClass存储类理论 二 案例 Storageclass存储类实战演示 1 搭建NFS服务端 2 搭建NFS供应商 provisioner 3 创建StorageClass存储类 4 创建PVC 通过Storag