美文网首页
kubernetes资源对象之PersistentVolume

kubernetes资源对象之PersistentVolume

作者: 一舍 | 来源:发表于2020-03-27 16:46 被阅读0次

PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 提供了方便的持久化卷。

PV 提供存储资源,PVC 请求存储资源。

PV 和 PVC 可以将 pod 和数据卷解耦,pod 不需要知道确切的文件系统或者支持它的持久化引擎。

Volume 的生命周期,包括6个阶段:

  • Provisioning: 创建PV
  • Binding: 将 PV 分配给 PVC
  • Using: Pod 通过 PVC 使用该 Volume
  • Releasing: Pod 释放 Volume 并删除 PVC
  • Reclaiming:回收 PV
  • Deleting:删除 PV

Volume 根据其生命周期阶段,分为4个状态:

  • Available:可用
  • Bound:已经分配给 PVC
  • Released:PVC 解绑,但还未执行回收
  • Failed:发生错误

PV

PersistentVolume(PV)是集群之中的一块存储。

PV的访问,有3种模式:

  • ReadWriteOnce(RWO):可读可写,但只支持被单个节点挂载
  • ReadOnlyMany(ROX):可以以只读的方式被多个节点挂载
  • ReadWriteMany(RWX):可以以读写的方式被多个节点共享

不是每一种存储都支持这三种方式

PV 的回收策略(persistentVolumeReclaimPolicy),指 PVC 释放卷的时候, PV 该执行的操作,有3种模式:

  • Retain:不清理, 保留 Volume
  • Recycle:删除数据
  • Delete:删除存储资源

PV的创建支持两种方式:

  • 手动静态创建
  • 通过 StorageClass 动态创建

静态创建

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /tmp
    server: 172.17.0.2

动态创建

Kubernetes 还提供了 StorageClass 来动态创建 PV,不仅节省了管理员的时间,还可以封装不同类型的存储供 PVC 选用。

StorageClass 包括4个部分:

  • provisioner:指定 Volume 插件的类型
  • parameters:指定 provisioner 的选项
  • mountOptions:指定挂载选项
  • reclaimPolicy:指定回收策略,同 PV 的回收策略

不是每一种存储都支持这动态创建

apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: fast
  provisioner: kubernetes.io/rbd
  parameters:
    monitors: 10.16.153.105:6789
    adminId: kube
    adminSecretName: ceph-secret
    adminSecretNamespace: kube-system
    pool: kube
    userId: kube
    userSecretName: ceph-secret-user

PVC

PersistentVolumeClaim (PVC) 是对 PV 的请求,PVC 请求特定大小和访问模式的数据卷。

创建PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  volumeName: pv0003

将PVC挂载到pod中

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

相关文章

网友评论

      本文标题:kubernetes资源对象之PersistentVolume

      本文链接:https://www.haomeiwen.com/subject/qdfruhtx.html