kubernetes存储方案(三):Heketi+GlusterFS+PV+PVC

PV的介绍

  • PersistentVolume(PV) 是集群中由管理员配置的一段网络存储。集群中的资源就像一个节点是一个集群资源,可以从远程的NFS 或分布式对象存储系统中创建得来(PV 存储空间大小、访问方式)。
  • PV 是诸如卷之类的卷插件,但是只有独立于使用 PV 的任何单个 pod 的生命周期。
  • 该 API 对象捕获存储的实现细节,即 NFS,ISCSI 或云提供商特定的存储系统。
  • PV 就是从存储设备中的空间创建出一个存储资源。

PVC的介绍

  • PersistentVolumeClaim(PVC) 是用户存储的请求。PVC 的使用逻辑:在 pod 中定义一个存储卷(该存储卷类型为PVC),定义的时候直按指定大小,PVC 必须与对应的 PV 建立关系,PVC 会根据定义去 PV 申请,而 PV是由存储空间创建出来的。PV 和PVC 是 kubernetes 抽象出来的一种存储资源。
  • 虽然 PersistentVolumeClaims 允许用户使用抽象存储资源,但是常见的需求是,用户需要根据不同的需求去创建PV,用于不同的场景。而此时需要集群管理员提供不同需求的 PV,而不仅仅是 PV 的大小和访问模式,但又不需要用户了解这些卷的实现细节。对于这样的需求,此时可以采用 storageclass 资源。

PV 与 PVC

  • PV 是集群中的资源,PVC 是对这些资源的请求,也是对资源的索引检查。

PV 与 PVC生命周期

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

  • Provisioning(配置) —> Binding(绑定) —> Using(使用) —> Releasing(释放) —> Recycling(回收)

  • Provisioning,即 PV 的创建,可以直接创建 PV(静态方式),也可以使用 StorageClass 动态创建

  • Binding,将 PV 分配给 PVC

  • Using,Pod 通过 PVC 使用该Volume,并可以通过准入控制StorageProtection(1.9及以前版本为PVCProtection) 阻止删除正在使用的PVC

  • Releasing,Pod 释放 Volume 并删除 PVC

  • Recycling,回收 PV,可以保留 PV 以便下次使用,也可以直接从云存储中删除

根据这 5 个阶段,PV 的状态有以下 4 种:

  • Available(可用):表示可用状态,还未被任何 PVC 绑定

  • Bound(已绑定):表示 PV 已经绑定到 PVC

  • Released(已释放):表示 PVC 被删掉,但是资源尚未被集群回收

  • Failed(失败):表示该 PV 的自动回收失败

一个PV从创建到销毁的具体流程

  • 一个PV创建完后状态会变成Available,等待被PVC绑定。
  • 一旦被PVC邦定,PV的状态会变成Bound,就可以被定义了相应PVC的Pod使用。
  • Pod使用完后会释放PV,PV的状态变成Released。
  • 变成Released的PV会根据定义的回收策略做相应的回收工作。

三种回收策略

有三种回收策略,Retain、Delete和Recycle。

  • Retain就是保留现场,K8S集群什么也不做,等待用户手动去处理PV里的数据,处理完后,再手动删除PV。
  • Delete策略,K8S会自动删除该PV及里面的数据。
  • Recycle方式,K8S会将PV里的数据删除,然后把PV的状态变成Available,又可以被新的PVC绑定使用。

基于Heketi+GlusterFS使用pv和pvc

Heketi+GlusterFS部署安装请参考:https://www.cnblogs.com/zoujiaojiao/p/17676234.html

在glusterfs上创建一个volume

登录安装了heketi的服务器,使用heketi命令添加一个卷

# heketi-cli volume create --name dmp-dev --size 10 --replica 2 --user admin --secret adminkey

创建glusterfs的endpoint和service

这样做的好处:不需要在每个k8s节点上挂载glusterfs。

apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: dmp
  name: glusterfs
  namespace: dmp-dev
subsets:
- addresses:
  - ip: 10.1.30.32
  ports:
  - port: 1
    protocol: TCP
- addresses:
  - ip: 10.1.30.30
  ports:
  - port: 1
    protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: glusterfs
  namespace: dmp-dev
  labels:
    app: dmp
spec:
  ports:
  - port: 1

PV 和 PVC 的配置

        volumeMounts:
        - mountPath: /datart/files   #容器内路径
          name: dmp-datart    #这个pvc的名称与pv的名称一致
      volumes:
      - name: dmp-datart   #这个是pv的名称
        glusterfs:         #这个是glusterfs
          endpoints: glusterfs
          path: dmp-dev

posted @ 2023-09-04 10:18  邹姣姣  阅读(42)  评论(0编辑  收藏  举报