今天实践了在k8s server 上安装PV, PVC 安装nfs 的文件系统。

PersistentVolume (PV) 是外部存储系统中的一块存储空间由管理员创建和维护。与 Volume 一样,PV 具有持久性,生命周期独立于 Pod。

PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。需要为 Pod 分配存储资源时,用户可以创建一个 PVC,指明存储资源的容量大小和访问模式(比如只读)等信息,Kubernetes 会查找并提供满足条件的 PV。

有了 PersistentVolumeClaim,用户只需要告诉 Kubernetes 需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。这些 Storage Provider 的底层信息交给管理员来处理,只有管理员才应该关心创建 PersistentVolume 的细节信息。

 

2.通过NFS实现持久化存储

2.1配置nfs

k8s-master  nfs-server

k8s-node1   nfs-client

所有节点安装nfs

yum install -y nfs-common nfs-utils 

在master节点创建共享目录

[root@k8s-master k8s]# mkdir /nfsdata

授权共享目录

[root@k8s-master k8s]# chmod 666 /nfsdata

编辑exports文件

[root@k8s-master k8s]# cat /etc/exports
/nfsdata *(rw,no_root_squash,no_all_squash,sync)

配置生效

  [root@k8s-master k8s]# export -r

启动rpc和nfs(注意顺序)

[root@k8s-master k8s]# systemctl start rpcbind
[root@k8s-master k8s]# systemctl start nfs

作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata

[root@k8s-master /]# showmount -e
Export list for k8s-master:

当然还有一个方法就是在node server 上执行如下命令:

[root@k8s-node /]# mount -t nfs -o rw 192.168.122.152:/nfsdata /mnt

发现/mnt 已经mount 上去啦,说明是成功的。

下面开始编写pv, pvc 的yaml 文件:

[root@k8s-master script]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
    name: pv0001
spec:
    capacity:
      storage: 1Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle

    storageClassName: nfs

    nfs:
      path: /nfsdata
      server: 192.168.122.152
[root@k8s-master script]#

-------------------------------------------------------------------------------------------------------------------

关于上面参数的说明:

① 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。

⑤ /nfsdata: 指定 PV 在 NFS 服务器上对应的目录。

--

下面开始执行:

[root@k8s-master script]# kubectl apply -f pv.yaml
persistentvolume/pv0001 created
[root@k8s-master script]# kubectl get pv

NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
pv0001   1Gi        RWO            Recycle          Bound    default/mypvc1   nfs                     18m

--------------------------------------------------------------------------------------------------------------------

STATUS 为 Available,表示 mypv1 就绪,可以被 PVC 申请。

接下来就可以编写pvc 文件:

[root@k8s-master script]# cat pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mypvc1
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

PVC 就很简单了,只需要指定 PV 的容量,访问模式和 class。

执行命令创建 mypvc1

[root@k8s-master script]# kubectl apply -f pvc.yaml
persistentvolumeclaim/mypvc1 created
[root@k8s-master script]# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
pv0001   1Gi        RWO            Recycle          Bound    default/mypvc1                           2m6s
[root@k8s-master script]# kubectl get pvc
NAME     STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mypvc1   Bound    pv0001   1Gi        RWO                           11s

从 kubectl get pvc 和 kubectl get pv 的输出可以看到 mypvc1 已经 Bound 到 mypv1,申请成功。

发现纯粹是通过storage大小进行匹配的, 所以size 大小要match, 以后要注意。

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐