一、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