• NFS pv部署


    一、部署nfs服务端:

    可以选择kubernetes_cluster内的任意的node去做为nfs服务端,部署节点也可以。我选择的是部署节点去做为nfs服务端。

    (1)部署节点安装nfs服务软件包:

    yum install -y nfs-utils rpcbind
    
    vim /etc/exports
    
    /nfsdata *(rw,no_root_squash,no_all_squash,sync)

    (2)保存配置文件后,执行如下操作:

    在服务端创建对应的目录和赋予权限(所有节点包括部署节点都要创建):

    mkdir /nfsdata
    
    chmod 777 /nfsdata

    (3) 启动rpcbind和nfs服务:

    systemctl start rpcbind && systemctl enable rpcbind
    
    systemctl start nfs && systemctl enable nfs

    (4)每个node安装nfs工具

     yum install -y nfs-utils 

    (5) 每个node查询NFS服务器

    showmount -e nfs-ip

     

    二、 NFS PersistentVolume 

    创建 PV 

    (1)下面创建一个 PV mypv1,配置文件 nfs-pv1.yml 如下:

    ① capacity 指定 PV 的容量为 1G。

    ② accessModes 指定访问模式为 ReadWriteOnce,支持的访问模式有:

    ReadWriteOnce – PV 能以 read-write 模式 mount 到单个节点。

    ReadOnlyMany – PV 能以 read-only 模式 mount 到多个节点。

    ReadWriteMany – PV 能以 read-write 模式 mount 到多个节点。

    ③ persistentVolumeReclaimPolicy 指定当 PV 的回收策略为 Recycle,支持的策略有(当pv不用时,它的回收策略):

    Retain – 需要管理员手工回收。

    Recycle – 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*。

    Delete – 删除 Storage Provider 上的对应存储资源,例如 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。

    ④ storageClassName 指定 PV 的 class 为 nfs。相当于为 PV 设置了一个分类,PVC 可以指定 class 申请相应 class 的 PV。

    ⑤ 指定 PV 在 NFS 服务器上对应的目录。

    注意要做storage-provider(存储提供者)段要提前建好文件夹

    cd /nfsdata
    
    mkdir pv1

    创建 mypv1

    kubectl apply –f nfs-pv1.yml

    STATUS 为 Available,表示 mypv1 就绪,可以被 PVC 申请。

    创建 PVC

    (1)接下来创建 PVC mypvc1,配置文件 nfs-pvc1.yml 如下:

     

    PVC 就很简单了,只需要指定 PV 的容量,访问模式和 class。

    (2)创建 mypvc1:

    kubectl apply –f nfs-pvc1.yml

     

    从 kubectl get pvc 和 kubectl get pv 的输出可以看到 mypvc1 已经 Bound 到 mypv1,申请成功。

    Pod使用pvc

    (1)接下来就可以在 Pod 中使用存储了,Pod 配置文件 pod1.yml 如下:

    与使用普通 Volume 的格式类似,在 volumes 中通过 persistentVolumeClaim 指定使用 mypvc1 申请的 Volume。

    (2)创建 mypod1:

    (3)验证 PV 是否可用:

    进入pod

    kubectl exec -it mypod1 /bin/sh

    我们先看一下我们nfs-server提供的共享目录,是什么都没有的

    现在我们在容器里的挂载目录去创建测试文件

    touch hello
    
    echo "123" >> hello

    我们在回到nfs-server端看一下

    三、 回收 PV  

    通过pvc回收pv

    (1)当 PV 不再需要时,可通过删除 PVC 回收。

    kubectl delete pvc mypvc1

      当 PVC mypvc1 被删除后,我们发现 Kubernetes 启动了一个新 Pod这个 Pod 的作用就是清除 PV mypv1 的数据。这个时候我们再看 NFS 服务器目录 /nfsdata/pv1 中已经没有数据了。

    (2)当数据清除完毕,mypv1 的状态重新变为 Available,此时则可以被新的 PVC 申请。

    (3)因为 PV 的回收策略设置为 Recycle,所以数据会被清除,但这可能不是我们想要的结果。如果我们希望保留数据,可以将策略设置为 Retain。

    (4)通过 kubectl apply 更新 PV:

    (5)回收策略已经变为 Retain,通过下面步骤验证其效果:

    ① 重新创建 mypvc1。

    ② 在 mypv1 中创建文件 hello。

    ③ mypv1 状态变为 Released。

    ④ Kubernetes 并没有启动 Pod recycler-for-mypv1。

    ⑤ PV 中的数据被完整保留。

    (6)我们再看 NFS 服务器目录 /nfsdata/pv1 中数据还保留。

    (7)虽然 mypv1 中的数据得到了保留,但其 PV 状态会一直处于 Released,不能被其他 PVC 申请。

    (8)为了重新使用存储资源,可以删除并重新创建 mypv1。删除操作只是删除了 PV 对象,存储空间中的数据并不会被删除。

    新建的 mypv1 状态为 Available,已经可以被 PVC 申请。

      PV 还支持 Delete 的回收策略,会删除 PV 在 Storage Provider 上对应存储空间。NFS 的 PV 不支持 Delete,支持 Delete 的 Provider 有 AWS EBS、GCE PD、Azure Disk、OpenStack Cinder Volume 等。

    四、 PV的动态供给:

    pv的供给方式

    前面的例子中,我们提前创建了 PV,然后通过 PVC 申请 PV 并在 Pod 中使用,这种方式叫做静态供给(Static Provision)。

      与之对应的是动态供给(Dynamical Provision),即如果没有满足 PVC 条件的 PV,会动态创建 PV。相比静态供给,动态供给有明显的优势:不需要提前创建 PV,减少了管理员的工作量,效率高。

    动态供给是通过 StorageClass 实现的,StorageClass 定义了如何创建 PV

    pv动态供给举例

    StorageClass standard:

    StorageClass slow:

      这两个 StorageClass 都会动态创建 AWS EBS,不同在于 standard 创建的是 gp2 类型的 EBS,而 slow 创建的是 io1 类型的 EBS。不同类型的 EBS 支持的参数可参考 AWS 官方文档。

    StorageClass 支持 Delete 和 Retain 两种 reclaimPolicy,默认是 Delete。

    与之前一样,PVC 在申请 PV 时,只需要指定 StorageClass 和容量以及访问模式,比如:

    除了 AWS EBS,Kubernetes 支持其他多种动态供给 PV 的 Provisioner,完整列表请参考 

    https://kubernetes.io/docs/concepts/storage/storage-classes/#provisioner

     

  • 相关阅读:
    Android开发工程师文集-1 小时学会SQLite
    Android开发工程师文集-1 小时学会各种Drawable
    Android开发工程师文集-1 小时学会各种Drawable
    Android精通教程-Android入门简介
    Android精通教程-Android入门简介
    AndroidStudio制作登录和注册功能的实现,界面的布局介绍
    AndroidStudio制作登录和注册功能的实现,界面的布局介绍
    Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率
    Android开发的插件Code Generator与LayoutCreator的安装与使用,提升你的开发效率
    AndroidStudio项目制作倒计时模块
  • 原文地址:https://www.cnblogs.com/shuaiyin/p/11073073.html
Copyright © 2020-2023  润新知