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
创建?mypv1kubectl 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,完整列表请参考?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |