一、部署nfs服务端:
k8s-master 节点上搭建了 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,支持的策略有:
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段要提前建好文件夹
 
(2)创建 mypv1
STATUS 为 Available,表示 mypv1 就绪,可以被 PVC 申请。
 
创建 PVC
 
(1)接下来创建 PVC mypvc1,配置文件 nfs-pvc1.yml 如下:
PVC 就很简单了,只需要指定 PV 的容量,访问模式和 class。
(2)创建 mypvc1
从 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 是否可用:
kubectl exec mypod1 touch /mydata/hello
 
可见,在 Pod 中创建的文件 /mydata/hello 确实已经保存到了 NFS 服务器目录 /nfsdata/pv1 中。
如果不再需要使用 PV,可用删除 PVC 回收 PV。
三、 回收 PV  :
通过pvc回收pv
 
(1)当 PV 不再需要时,可通过删除 PVC 回收。
 
当 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

第8篇NFS PersistentVolume的更多相关文章

  1. NFS PersistentVolume(8)

    一.部署nfs服务端: k8s-master 节点上搭建了 NFS 服务器 (1)安装nfs服务: yum install -y nfs-utils rpcbind vim /etc/exports ...

  2. NFS PersistentVolume

    一.部署nfs服务端: k8s-master 节点上搭建了 NFS 服务器 (1)安装nfs服务: yum install -y nfs-utils rpcbind vim /etc/exports ...

  3. NFS PersistentVolume(11)

    一.部署nfs服务端 1.需在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: yum install -y nfs-utils rpcbind vim /etc/ ...

  4. NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...

  5. NFS PersistentVolume【转】

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...

  6. kubernetes第八章--NFS PersistentVolume

  7. nfs实现k8s持久化

    1. 部署nfs服务端 k8s-master 节点上搭建了 NFS 服务器 (1)安装nfs服务: yum install -y nfs-utils rpcbind vim /etc/exports ...

  8. NFS pv部署

    一.部署nfs服务端: 可以选择kubernetes_cluster内的任意的node去做为nfs服务端,部署节点也可以.我选择的是部署节点去做为nfs服务端. (1)部署节点安装nfs服务软件包: ...

  9. Kubernetes Storage

    参考文章: https://kubernetes.io/docs/concepts/storage/volumes/ https://www.cnblogs.com/styshoo/p/6731425 ...

随机推荐

  1. Codeforces Round #518 (Div. 1) Computer Game 倍增+矩阵快速幂

    接近于死亡的选手没有水平更博客,所以现在每五个月更一篇. 这道题呢,首先如果已经有权限升级了,那么后面肯定全部选的是 \(p_ib_i\) 最高的. 设这个值为 \(M=\max \limits_i ...

  2. [AtCoder] Yahoo Programming Contest 2019

    [AtCoder] Yahoo Programming Contest 2019   很遗憾错过了一场 AtCoder .听说这场是涨分场呢,于是特意来补一下题. A - Anti-Adjacency ...

  3. BZOJ3508 开灯 & [校内NOIP2018模拟20181027] 密码锁

    Time Limit: 10 Sec Memory Limit: 128 MB Description xx作为信息学界的大神,拥有众多的粉丝.为了感谢众粉丝的爱戴,xx决定举办一场晚会.为了气派,x ...

  4. 1.xml简单介绍

    1.xml(eXtensible Markup Language)的简介 (1)xml: 可扩展标记型语言 - 标记型语言:例如html也是标记型语言,也是使用标签来操作的 - 可扩展:html里面的 ...

  5. 25-Node.js学习笔记-express-app.locals对象

    app.locals对象 将变量设置到app.locals对象下面,这个数据在所有的模板中都可以获取到 app.locals.users=[{ name:'柠檬不酸', age:20 },{ name ...

  6. Codeforces 776E: The Holmes Children (数论 欧拉函数)

    题目链接 先看题目中给的函数f(n)和g(n) 对于f(n),若自然数对(x,y)满足 x+y=n,且gcd(x,y)=1,则这样的数对对数为f(n) 证明f(n)=phi(n) 设有命题 对任意自然 ...

  7. exists 的简单介绍

    准备数据: CREATE TABLE Books( BookID number, BookTitle VARCHAR2(20) NOT NULL, Copyright varchar2(20) ) I ...

  8. 六、unique_lock

    一.unique_lock取代lock_guard 是个类模板,一般用lock_guard,unique_guard更灵活,效率差一点,内存占用多了一点. 二.unique_lock 的第二个参数 1 ...

  9. python常用安装

    pip install CalledProcessErrorpip install Popenpip install runpip install requests

  10. vue项目打包之后原本好的样式变得不好了的原因分析

    这个主要是打包的过程将所有的css文件进行归类压缩,导致原先其他文件里的样式对当前的产生了影响,应该有同样的类名了.怎么改?要么改类名,要么用scope,scss的写法.