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

这篇具有很好参考价值的文章主要介绍了【Kubernetes存储篇】StorageClass存储类动态生成PV详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

k8s storageclass 创建pv,# 3-Kubernetes容器编排,kubernetes,运维,docker,storageclass,动态生成PV

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

k8s storageclass 创建pv,# 3-Kubernetes容器编排,kubernetes,运维,docker,storageclass,动态生成PV

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

k8s storageclass 创建pv,# 3-Kubernetes容器编排,kubernetes,运维,docker,storageclass,动态生成PV

如上图已经自动创建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

k8s storageclass 创建pv,# 3-Kubernetes容器编排,kubernetes,运维,docker,storageclass,动态生成PV

在 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

k8s storageclass 创建pv,# 3-Kubernetes容器编排,kubernetes,运维,docker,storageclass,动态生成PV

三、步骤总结

1、搭建NFS服务端

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

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

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

5、创建Pod,使用PVC文章来源地址https://www.toymoban.com/news/detail-547001.html

到了这里,关于【Kubernetes存储篇】StorageClass存储类动态生成PV详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(K8S)中StorageClass(SC)详解、实例

    StorageClass是一个存储类,通过创建StorageClass可以动态生成一个存储卷,供k8s用户使用。 使用StorageClass可以根据PVC动态的创建PV,减少管理员手工创建PV的工作。 StorageClass的定义主要包括名称、后端存储的提供者(privisioner)和后端存储的相关参数配置。StorageClass一旦被创建,

    2024年02月02日
    浏览(37)
  • k8s存储卷-动态PV

    存储卷: EmptyDir:容器内部,随着pod销毁,emptyDir也会消失,不能做数据持久化 HostPath:持久化存储数据,可以和节点上目录做挂载,pod被销毁了数据还在 NFS:一台机器,提供pod发起的挂载的请求 PVC就是pid发起挂载的反请求: PV持久化存储的目录,ReadWriteMary           

    2024年01月17日
    浏览(42)
  • Kubernetes(K8S)使用PV和PVC做存储安装mysql

    首先你需要一个k8s环境,可以参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122 我们可以简单看一下官网的描述:https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/#introduction 持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用

    2024年02月03日
    浏览(47)
  • k8s pv pvc的介绍|动态存储|静态存储

    当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,em

    2024年02月06日
    浏览(38)
  • 阿里云 K8s PVC 绑定 StorageClass 申领 PV 失败

    错误场景: 因为阿里云没有默认的 StorageClass 我也懒得更新,所以就创建了一个类型是云盘的 StorageClass 。 但是在创建 PVC 之后发现一直是 Pending 状态就查询了一下日志,然后看到很多下面这种错误 使用的配置 原因: 根据阿里云 FAQ 文档 发现在 PVC 中指定的云盘大小不符合规范

    2024年02月12日
    浏览(38)
  • K8s---存储卷(动态pv和pvc)

    当我要发布pvc可以生成pv,还可以共享服务器上直接生成挂载目录。pvc直接绑定pv。 1、卷插件:k8s本生支持的动态pv创建不包括nfs,需要声明和安装一个外部插件 Provisioner: 存储分配器。动态创建pv,然后根据pvc的请求自动绑定和使用。 2、StorageClass:来定义pv的属性,存储类型

    2024年01月21日
    浏览(58)
  • 【云原生-Kubernetes篇】K8s的存储卷/数据卷+PV与PVC

    容器部署过程中一般有以下三种数据: • 启动时需要的 初始数据 :例如配置文件 (init container) • 启动过程中产生的 临时数据 :该临时数据需要多个容器间共享 • 启动过程中产生的 持久化数据 :例如MySQL的data目录 (业务数据–很重要) 而容器中的文件在磁盘上是 临时

    2024年02月05日
    浏览(42)
  • k8s~动态生成pvc和pv

    有时,我们不想手动建立pv和pvc,这时,我们可以通过strongClass存储类来帮我们实现,动态建立pvc,并动态为它分配pv存储空间,我们以nfs为例,说一下动态分配在nfs存储截至上建立pv的方式。 StorageClass和PVC及PV 集群权限与绑定rbac.yaml 建立动态pvc的provisioner.yaml 建立strongClass的

    2024年02月03日
    浏览(48)
  • 【云原生】K8S存储卷:PV、PVC详解

    容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共

    2024年02月12日
    浏览(43)
  • [Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

    前面通过 deployment 结合 service 来部署 无状态的应用 ,下面来讲解通过 satefulSet 结合 service 来部署 有状态的应用 无状态: 无状态 (stateless) 、牲畜 (cattle) 、无名 (nameless) 、可丢弃 (disposable) 有状态: 有状态 (stateful) 、宠物 (pet) 、具有名 (haviing name) 、不可丢弃 (non-disposable) St

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包