K8S-PV/PVC配置

1、准备NFS环境

         NFS共享卷:在生产环境中经常需要多个Pod或多个APP中共享数据 ,而这些应用又在不同的机器的不同Pod里面,网络文件系统经常用来解决这一问题;Kubernetes中通过简单地配置就可以挂载NFS到Pod中,而NFS中的数据中可以永久保存的,同时NFS支持并发写操作;cephfs、glusterfs等都能很好的解决这个问题,以NFS为例。

1.1、搭建NFS服务器

1.1.1、环境准备

        NFS:192.168.4.30,关闭防火墙、selinx

1.1.2、安装软件

[root@nfs ~]# yum install -y nfs-utils
[root@nfs ~]# mkdir -m 777 /var/webroot
[root@nfs ~]# cat /etc/exports
/var/webroot *(rw)
[root@nfs ~]# systemctl enable --now nfs

1.1.3、各节点上安装nfs,在master节点上执行以下命令 

[root@master ~]# for i in 21 22 23 ; do ssh 192.168.4.$i "yum install -y nfs-utils"; done
[root@master ~]# for i in 21 22 23 ; do ssh 192.168.4.$i "systemctl enable --now nfs"; done
[root@master ~]# for i in 21 22 23 ; do ssh 192.168.4.$i "showmount -e 192.168.4.30"; done

1.1.4、查询本机nfs共享目录情况

[root@nfs ~]# showmount -e localhost
Export list for localhost:
/var/nfs/nexus *
/var/webroot 

1.1.5、查询本机共享目录连接情况

[root@nfs ~]# showmount -a localhost

 2、PV和PVC概述

        由于kubernetes支持的存储系统有很多,为了能够屏蔽底层存储实现的细节,方便普通用户使用,kubernetes引入了PV和PVC两种资源对象:

  • PV是持久化卷的意思,是对底层的共享存储的一种抽象,根据集群的基础设施变化而变化,由k8s集群管理员配置,(持久卷封装层为PV)是资源的提供者。
  • PVC是持久化卷声明的意思,是用户对于存储需求的一种声明。(持久卷的使用分配者)是资源的使用者。

2.1、PV

2.1.1、PV的资源清单文件,搭建存储的管理员配置pv

[root@master ~]# cat mypv.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
    - ReadOnlyMany
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /var/webroot
    server: 192.168.4.30

访问模式(accessModes):用来描述用户应用对存储资源的访问权限,底层不同的存储类型可能支持的访问模式不同

  • ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载
  • ReadOnlyMany(ROX):只读权限,可以被多个节点挂载
  • ReadWriteMany(RWX):读写权限,可以被多个节点挂载

回收策略(persistentVolumeReclaimPolicy):当PV不再被使用之后,对其的处理方式,底层不同的存储类型可能支持的回收策略不同

  • Retain(保留):保留数据,需要管理员手动清理数据
  • Recycle(回收):清除PV中的数据,效果相当于rm -rf /volume/*
  • Delete(删除):和PV相连的后端存储完成volume的删除操作,常见于云服务器厂商的存储服务

存储类别(storageClassName):PV可以通过自定义storageClassName参数指定一个存储类别

  • 具有特定类型的PV只能和请求了该类别的PVC进行绑定
  • 未设定类别的PV只能和不请求任何类别的PVC进行绑定

2.1.2、创建 pv

[root@master ~]# kubectl apply -f mypv.yaml 

 2.1.3、查看PV

[root@master ~]# kubectl get pv -o wide 
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
pv     5Gi        RWO,ROX,RWX    Recycle          Available                                   23s   Filesystem

2.2、PVC

2.2.1、PVC的资源清单文件,持久卷的使用分配者

[root@master ~]# cat mypvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi

2.2.2、创建PVC 

[root@master ~]# kubectl apply -f mypvc.yaml 

2.2.3、查看PVC

[root@master ~]# kubectl get pvc -o wide 
NAME      STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
pvc-nfs   Pending                                                     30s   Filesystem

PV和PVC之间的相互作用遵循如下的生命周期:

  • 资源供应(此时PV的状态为Available):管理员手动创建底层存储和PV
  • 资源绑定(此时PV的状态为Bound):用户创建PVC,kubernetes负责根据PVC声明去寻找PV,一旦找到符合条件的PV,就将该PV和用户定义的PVC进行绑定,用户的应用就可以使用这个PVC了。PV一旦绑定到某个PVC上,就会被这个PVC独占,不能再和其他的PVC进行绑定。如果找不到,PVC就会无限期的处于Pending状态,直到系统管理员创建一个符合其要求的PV
  • 资源使用:用户可以在Pod中像volume一样使用PVC
  • 资源释放(此时PV的状态为已释放):用户删除PVC来释放PV。和该PVC绑定的PV将会标记为“已释放”,但是还不能立刻和其他的PVC进行绑定。之前PVC写入的数据可能还留在存储设备上,只有在清除之后该PV才能再次使用
  • 资源回收:kubernetes根据PV设置的回收策略进行资源的回收。如果该PV的自动回收失败,则此时PV的状态为Failed

你可能感兴趣的:(K8S,kubernetes,java,容器)