pv/pvc小结---动态创建pv

pv/pvc挂载配置

  1. StorageClass存储类理论StorageClass的作用主要有以下几个方面:

    动态存储卷分配:StorageClass可以根据定义的属性动态地创建存储卷,无需手动创建和管理存储卷。
    存储卷的属性管理:StorageClass可以定义存储卷的属性,如存储类型、存储容量、访问模式等,从而更好地满足应用程序的存储需求。
    存储资源的管理:StorageClass可以将存储资源进行分类管理,方便开发者根据应用程序的需求进行选择。
    每个 StorageClass 都有一个供应商(Provisioner),用来决定使用哪个卷插件制备 PV。 该字段必须指定。

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

    NFS服务器配置

  • 修改 exports 文件,添加允许访问的客户端

    #编辑exports文件
    vi /etc/exports
    #添加允许访问的客户端 (/app/data 服务器上的路径)
    /app/data 192.168.**.***(rw,sync,no_root_squash)
    #加载生效
    exportfs -r
    
    #重启rpcbind、nfs-server
    systemctl restart rpcbind
    systemctl restart nfs-server
    

    NFS客户端配置

  • 客户端挂载nfs(做测试用,一般情况下使用其他客户端挂载nfs服务器,例如Redis客户端)

    #创建一个路径,将服务端(192.168.**.***)的/app/data 目录挂载到客户端的/test/data 目录上,从而实现文件共享
    mkdir -p /test/data
    mount -t nfs 192.168.**.***:/app/data  /test/data
    
    #永久挂载配置
    #修改 /etc/fstab 文件  ,末尾添加挂载信息
    vim /etc/fstab
    192.168.*.***:/app/data         /test/data      nfs     defaults    0   0
    

    搭建NFS供应商(provisioner)

  • 第一步:创建运行nfs-provisioner需要使用的SA账号 --------nfs-provisioner.yaml

    # nfs-provisioner.yaml
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nfs-sun
    
    #运行该yaml文件创建SA账号
    kubectl apply -f nfs-provisioner.yaml
    #查看SA账号
    kubectl get sa nfs-sun
    
  • 第二步:对SA账号进行授权

    kubectl create clusterrolebinding nfs-sun --clusterrole=cluster-admin --serviceaccount=default:nfs-sun
    
  • 第三步:安装nfs-deployment.yaml程序 ------nfs-deployment.yaml

    ---
    kind: Deployment
    apiVersion: apps/v1
    metadata:
      name: nfs-sun
    spec:
      selector:
        matchLabels:
           app: nfs-sun
      replicas: 3
      strategy:        # 更新策略
        type: Recreate
      template:
        metadata:
          labels:
            app: nfs-sun
        spec:
          serviceAccount: nfs-sun   # 指定SA账号
          containers:
            - name: nfs-sun
              image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0    #provisioner的镜像
              imagePullPolicy: IfNotPresent
              volumeMounts:
                - name: nfs-client-root
                  mountPath: /persistentvolumes
              env:
                - name: PROVISIONER_NAME
                  value: example.com/nfs-sun     # NFS供应商名称
                - name: NFS_SERVER
                  value: 192.168.**.***         # NFS服务端地址
                - name: NFS_PATH           
                  value: /app/data/      # NFS共享目录
          volumes:
            - name: nfs-client-root
              nfs:
                server: 192.168.**.***          # NFS服务端地址
                path: /app/data/          # NFS共享目录
    
  • 执行yaml文件&& 查看Pod状态

    kubectl apply -f  nfs-deployment.yaml
    deployment.apps/nfs-sun unchanged
    
    kubectl get pods
    NAME                        READY   STATUS    RESTARTS   AGE
    nfs-sun-97f96446d-6ng62   1/1     Running   0          3s
    nfs-sun-97f96446d-9kf6x   1/1     Running   0          3s
    nfs-sun-97f96446d-cbbz9   1/1     Running   0          3s
    
  • 创建StorageClass存储类--------nfs-storageclass.yaml

    #nfs-storageclass.yaml
    ---
    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: nfs-sun
    provisioner: example.com/nfs-sun   # 指定NFS供应商名称,和上面对应上
    

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

    执行yaml文件 && 查看storageclass状态

    kubectl apply -f nfs-storageclass.yaml
    kubectl get sc nfs-sun
    NAME     PROVISIONER    RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
    nfs-sun  example.com/nfs-sun  Delete      Immediate          false                20h 
    
  • 创建PVC,通过StorageClass动态生成PV --------- nfs-pvc.yaml

    #nfs-pvc.yaml
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nfs-sun
    spec:
      accessModes:  ["ReadWriteMany"]
      resources:
        requests:
          storage: 1Gi
      storageClassName:  nfs-sun   # 指定使用storageclass的名称,来自动生产PV
    
    kubectl apply -f nfs-pvc.yaml
    kubectl get pvc
    NAME      STATUS   VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    nfs-sun   Bound    pvc-ea-bb123   1Gi        RWX            nfs-sun       20h
    kubectl get pv
    
  • 如果想在创建redis的pod时,挂载pvc,需要将创建pvc的配置,写入到创建pod的yaml文件中。

  • 手动创建pv/pvc的yaml文件如下(一般情况下,不会进行手动创建)

    #pv.yaml
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: redis-pv
    spec: 
      storageClassName: nfs-sun
      #persistentVolumeReclaimPolicy: Recycle
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      nfs:
        server: 192.168.**.***
        path: "/app/data"
        
    #pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: redis-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: nfs-sun    //要与pv的storageClassName对应
      resources:
        requests: 
          storage: 1Gi        //要与pv的storage对应
    

小结:

​ 将目录挂载到客户端上,只不过,pv/pvc的方式繁琐些,NFS如果停止,则在客户端上查不到数据

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mentality_sx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值