一、PV配置示例¶
在企业内,可能存储很多不同类型的存储,比如NFS、Ceph、GlusterFS等,针对不同类型的后端存储具有不同的配置方式,这也是对集群管理员的一种挑战,因为集群管理员需要对每种存储都有所了解。接下来看一下几个常用的PV配置示例。
2.6.1 基于NFS的PV¶
首先我们需要安装一下NFS
1.每台机器安装NFS客户端
$ yum install nfs-utils -y
2.在k8s-node01(192.168.1.34)启动nfs
[root@k8s-node01 ~]# systemctl start nfs-server
在k8s-node01(192.168.1.34)查看nfs支持的版本
[root@k8s-node01 ~]# cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
3.在k8s-node01(192.168.1.34)上创建一个共享目录
[root@k8s-node01 ~]# mkdir -p /data/nfs/test_nfs
4.在k8s-node01(192.168.134)编辑授权文件,这里网段根据自己主机来定,我这里网段是192.168.1.0/24
[root@k8s-node01 ~]# vim /etc/exports
/data/nfs/ 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
5.在k8s-node01(192.168.1.34)配置生效
[root@k8s-node01 ~]# exportfs -r
6.在k8s-node01(192.168.1.34)重新加载NFS
[root@k8s-node01 ~]# systemctl reload nfs-server
7.在k8s-master01上进行挂载测试
[root@k8s-master01 ~]# mount -t nfs 192.168.1.34:/data/nfs /mnt/
[root@k8s-master01 ~]# cd /mnt/
[root@k8s-master01 mnt]# touch test123
8.在k8s-node01(192.168.1.34)进行验证
[root@k8s-node01 ~]# cd /data/nfs/
[root@k8s-node01 nfs]# ls
test123 test_nfs
接下来,我们对上面的测试进行卸载
1.针对上诉测试进行卸载
[root@k8s-master01 ~]# umount /mnt/
最后进行NFS配置示例
1.定义一个yaml文件
[root@k8s-master01 pv]# vim pv-nfs.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nfs
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs-slow
nfs:
path: /data/nfs/test_nfs
server: 192.168.1.34
上面参数说明:
- capacity:容量配置
- volumeMode:卷的模式,目前支持Filesystem (文件系统) 和 Block(块),其中Block类型需 要后端存储支持,默认为文件系统
- accessModes:该PV的访问模式,这里设置为RWO,可以被单节点以读写模式挂载
- storageClassName:PV的类,一个特定类型的PV 只能绑定到特定类别的PVC
- persistentVolumeReclaimPolicy:回收策略
- nfs:NFS服务配置,包括以下两个选项:path:NFS上的共享目录;server:NFS的IP地址
2.部署
[root@k8s-master01 pv]# kubectl create -f pv-nfs.yaml
3.结果验证
[root@k8s-master01 pv]# kubectl get -f pv-nfs.yaml
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-nfs 5Gi RWO Recycle Available nfs-slow 16s
2.6.2 基于HostPath的PV¶
当公司目前没有可靠性的存储,但是想要部署k8s集群中应用的数据不丢失,这时把宿主机目录直接挂载到Pod,Pod的数据直接落在宿主机上。接下来介绍基于HostPath的PV:
1.在master01节点上创建挂载目录
[root@k8s-master01 pv]# mkdir -p /mnt/data
2.定义一个yaml文件
[root@k8s-master01 pv]# vim pv-hostpath.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-hostpath
labels:
type: local
spec:
storageClassName: hostpath
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
上面参数说明:
- capacity:容量配置
- accessModes:该PV的访问模式,这里设置为RWO,可以被单节点以读写模式挂载
- storageClassName:PV的类,一个特定类型的PV 只能绑定到特定类别的PVC
- hostPath:hostPath配置,path:"/mnt/data",其中/mnt/data为宿主机的目录
3.部署
[root@k8s-master01 pv]# kubectl create -f pv-hostpath.yaml
4.结果验证
[root@k8s-master01 pv]# kubectl get -f pv-hostpath.yaml
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
task-pv-volume 10Gi RWO Retain Available hostpath 26s
2.6.3 基于Ceph RBD的PV¶
Ceph可能是目前企业内最常用的一种分布式存储之一,同时支持文件系统、块存储及对象存储,和上述NFS和HostPath相比,具有高可用性和读写高效性。接下来看一下Ceph RBD类型的PV配置:
1.定义一个yaml文件
[root@k8s-master01 pv]# vim pv-cephrbd.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: ceph-rbd-pv
spec:
capacity:
storage: 1Gi
storageClassName: ceph-fast
accessModes:
- ReadWriteOnce
rbd:
monitors:
- 192.168.1.123:6789
- 192.168.1.124:6789
- 192.168.1.125:6789
pool: rbd
image: ceph-rbd-pv-test
user: admin
secretRef:
name: ceph-secret
fsType: ext4
readOnly: false
上面参数说明:
- monitors:Ceph的monitor节点的IP
- pool:所用Ceph Pool的名称,可以使用ceph osd pool ls查看
- image:Ceph块设备中的磁盘映像文件,可以使用rbd create POOL_NAME/IMAGE_NAME--size 1024创建,使用rbd list POOL_NAME查看
- user:Rados的用户名,默认是admin
- secretRef:用于验证Ceph身份的密钥
- fsType:文件类型,可以是Ext4、XFS等
- readOnly:是否是只读挂载
注意:Ceph的Pool和Image需要提前创建才能使用。虽然前面讲述了RBD类型的PV配置示例,但是在实际使用时,大多数Ceph存储的使用都是采用动态存储的方式,很少通过静态方式去管理。同时,Kubernetes所有的节点都需要安装ceph-common才能正常挂载Ceph.
2.部署
[root@k8s-master01 pv]# kubectl create -f pv-cephrbd.yaml
3.结果验证
[root@k8s-master01 pv]# kubectl get -f pv-cephrbd.yaml