kubernetes(k8s)的数据管理之PersistentVolume(pv)和PersistentVolumeClaim(pvc)

k8s的数据管理有多种形式,包括:
1、Volume
  1.1、emptyDir
    是最基础的Volume类型,一个empryDir Volume是Host上的一个空目录。
    emptyDir Volume的生命周期与Pod一致。
  1.2、hostPath
    hostPath Volume的作用是将Docker Host文件系统中已经存在的目录mount给Pod的容器。
2、外部Storage Provider
    如果k8s部署在公有云上,可以直接使用云硬盘作为Volume。
3、PersistentVolume(pv)和PersistentVolumeClaim(pvc) --重点--

一、概念

PersistentVolume(pv)
    是外部存储系统中的一块存储空间,由管理员创建和维护。与Volume一样,PV具有持久性,生命周期独立于Pod。
PersistentVolumeClaim(pvc)
    是对PV的申请。pvc通常由普通用户创建和维护。
饭饭理解:
    就是由管理员创建一个大的目录pv,比如/fanfan;然后其他人就可以在此目录下创建各自所需要的目录了,就是pvc,比如/fanfan/test1,/fanfan/test2,...

二、实战

    要使用pv/pvc的存储方式,就必须要有一个共享的文件目录了,让k8s集群内的所有服务器全部都可以访问到,这里使用nfs创建一个共享目录。

[root@cma-cluster-slave4 home]# showmount -e
Export list for cma-cluster-slave4:
/home/lyn/sharedata *
[root@cma-cluster-slave4 home]# mkdir -p /home/lyn/sharedata/kafkatest     #在创建pv之前,要创建此文件夹

下面创建pv的配置文件:

[root@cma-cluster-slave4 home]# vim nfs-kafka-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: kafka-pv
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce         #这儿的权限模式,千万记住要需要挂载的YAML文件的权限模式一样,否则会报找不见storageClass的错误。
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: cun
  nfs:
    path: /home/lyn/sharedata/kafkatest
    server: 10.14.83.149

accessModes 指定访问模式:
    ReadWriteOnce:表示 PV 能以 read-write 模式 mount 到单个节点;
    ReadOnlyMany:表示 PV 能以 read-only 模式 mount 到多个节点;
    ReadWriteMany:表示 PV 能以 read-write 模式 mount 到多个节点;
persistentVolumeReclaimPolicy 指定pv的回收策略
    Retain:表示需要管理员手工回收
    Recycle:表示清除pv中的数据,效果相当于执行rm -rf /home/lyn/sharedata/kafka-pv/*
    Delete:表示删除Storage Provider上的对应存储资源,比如:OpenStack Cinder Volume等
storageClassName 指定 pv 的 class 为 cun。相当于为 pv 设置了一个分类,pvc 可以指定 class 申请相应 class 的 pv 。
path:指定pv在cun服务器上对应的目录
创建pv的服务:

[root@cma-cluster-slave4 home]# kubectl apply -f nfs-kafka-pv.yaml
[root@cma-cluster-slave4 home]# kubectl get pv

    STATUS 为 Available,表示nfs-kafka.yaml就绪,可以被pvc申请。
下面创建pvc的配置文件:
    从pv即kafka-py申请资源

[root@cma-cluster-slave4 home]# vim nfs-kafka-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: kafka-pvc
spec:
  accessModes:
    - ReadWriteOnce      #这儿的权限模式,千万记住要需要挂载的YAML文件的权限模式一样,否则会报找不见storageClass的错误。
  resources:
    requests:
      storage: 1Gi
  storageClassName: cun

创建pvc的服务

[root@cma-cluster-slave4 home]# kubectl apply -f nfs-kafka-pvc.yaml
[root@cma-cluster-slave4 home]# kubectl get sv,svc -o wide

    从输出界面可以看到 STATUS 已经变成 Bound,申请成功。

[root@cma-cluster-slave4 home]# kubectl get sv,svc -o wide

下面创建pod的配置文件

[root@cma-cluster-slave4 home]# vim pod.yaml
kind: pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: mypod
      image: busybox
      args:
      - /bin/sh
      - -c
      - sleep 30000
      volumeMounts:
      - mountPath: "/mydata"
        name: mydata
  volumes:
    - name: mydata
      persistentVolumeClaim:
        claimName: kafka-pvc

创建pod服务

[root@cma-cluster-slave4 home]# kubectl apply -f pod.yaml
[root@cma-cluster-slave4 home]# kubectl get pod -o wide

你可能感兴趣的:(kubernetes(k8s)的数据管理之PersistentVolume(pv)和PersistentVolumeClaim(pvc))