Kubernetes 持久化存储

介绍

k8s-pvc.png

对于管理计算资源,管理存储资源明显是一个另外的问题。 PersistentVolume 子系统为用户和管理提供了一个 API,该 API 将如何提供存储的细节抽象了出来。为此,我们引入了两个关于存储的新 API 资源:PersistentVolumePersistentVolumeClaim

PersistentVolume (PV) 是由集群管理员设置的,它是集群的一部分,就像集群中 node 资源一样。PV 是 Volume 之类的卷插件,但是具有独立于 Pod 的生命周期。此 API 对象包含存储细节的实现,即 NFS,iSCSI 或特定的云供应商提供的存储系统。

PersistentVolumeClaim (PVC) 是用户存储的请求。它与 Pod 相似,Pod 消耗节点资源,PVC 消耗 PV 资源。声明的请求可以指定特定的大小,访问模式。

StorageClass 为管理员提供了描述存储类的方法。不同的 class 可能会映射到不同的服务质量等级或备份策略,或由群集管理员确定的任意策略。 Kubernetes 本身不清楚各种 class 代表的什么。这个概念在其他存储系统中有时被称为 "配置文件"。

配置

静态创建 PV

集群管理员创建一些 PV。它们带有可供集群用户使用的实际存储细节。PersistentVolume 类型以插件形式实现。Kubernetes 目前支持以下插件类型:

  • GCEPersistentDisk
  • AWSElasticBlockStore
  • AzureFile
  • AzureDisk
  • FC (Fibre Channel)**
  • FlexVolume
  • Flocker
  • NFS
  • iSCSI
  • RBD (Ceph Block Device)
  • CephFS
  • Cinder (OpenStack block storage)
  • Glusterfs
  • VsphereVolume
  • Quobyte Volumes
  • HostPath (Single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)
  • VMware Photon
  • Portworx Volumes
  • ScaleIO Volumes
  • StorageOS
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:             # 指定 PV 容量
    storage: 5Gi
  volumeMode: Filesystem  # 卷模式,除了文件系统,还支持原始块,Filesystem/Block
  accessModes: 
    - ReadWriteOnce   # 访问模式,ReadWriteOnce(该卷可以被单个节点以读/写模式挂载), ReadOnlyMany(该卷可以被多个节点以只读模式挂载),ReadWriteMany(该卷可以被多个节点以读/写模式挂载)
  persistentVolumeReclaimPolicy: Recycle  # 回收策略,Retain(保留,手动回收),Recycle(回收,基本擦除), Delete(关联的存储资产(例如 AWS EBS、GCE PD、Azure Disk 和 OpenStack Cinder 卷)将被删除)
  storageClassName: slow      # 存储类名。指定类名的 PV 需要与指定类名的 PVC 绑定
  mountOptions:
    - hard
    - nfsvers=4.1
  nfs:
    path: /tmp
    server: 172.17.0.2

动态创建 PV

当集群管理员创建的静态 PV 都不匹配用户的 PersistentVolumeClaim 时。集群会基于 StorageClasse PVC 存储类 来创建 PV,并与 PersistentVolumeClaim 一一绑定。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}
StorageClass 存储类说明

StorageClass 为管理员提供了描述存储类的方法。不同的 class 可能会映射到不同的服务质量等级或备份策略,或由群集管理员确定的任意策略。 Kubernetes 本身不清楚各种 class 代表的什么。这个概念在其他存储系统中有时被称为 "配置文件"。

StorageClass 中包含 provisioner、parameters 和 reclaimPolicy 字段,当 class 需要动态分配 PersistentVolume 时会使用到。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Retain
mountOptions:
  - debug

provisioner: Storage class 有一个分配器,用来决定使用哪个卷插件分配 PV。该字段必须指定,详情请见:https://kubernetes.io/docs/concepts/storage/storage-classes/#provisioner

使用

在 Pod 中以 volume 的实行挂载。

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: dockerfile/nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Kubernetes PV & pvc 介绍 PersistentVolume(pv)和PersistentVol...
    YichenWong阅读 39,261评论 10 10
  • 学习本节内容前,希望你已经对Kubernetes中Volume的概念有了初步的了解,具体请参考这篇文章:Kuber...
    伊凡的一天阅读 17,433评论 0 14
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,917评论 0 5
  • kubernetes 简介 一个迅速过一遍kubernetes 非常不错的资源:基于Kubernetes构建Doc...
    bradyjoestar阅读 15,299评论 2 7
  • 【感恩日记】 今天,三七班班主任外出学习,临时通知我给他们班代半天班主任,于是欣然走马上任了!中间虽有一些小插曲,...
    碧水无痕阅读 249评论 0 0