美文网首页kubernetes
Kubernetes 持久化存储

Kubernetes 持久化存储

作者: 猴子精h | 来源:发表于2018-04-24 10:20 被阅读1261次

    介绍

    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 持久化存储

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