Loading

Kubernetes 存储简介

存储分类结构图

半持久化存储

1.EmptyDir

EmptyDir是一个空目录,生命周期和所属的 Pod 是完全一致的,EmptyDir的用处是,可以在同一 Pod 内的不同容器之间共享工作过程中产生的文件,缺省情况下,EmptyDir 是使用主机磁盘进行存储的,也可以设置emptyDir.medium 字段的值为Memory,来提高运行速度,这种设置,对该卷的占用会消耗容器的内存份额。

  • 示例
   volumes:
   - name: cache-volume
     emptyDir: {}   #指定存储方式为emptydir

2.HostPath

映射node文件系统中的文件或者目录到pod里,相当于docker中的-v目录映射,只不过在k8s中的时候,pod会漂移,当pod漂移到其他node节点的时候,pod不会跨节点的去读取目录。所以说hostpath只能算一种半持久化的存储方式,如果 Pod 发生跨主机的重建,其内容就难保证了。

  • 示例
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data            #node节点上的路径
      # this field is optional
      type: Directory   #path的属性,下面会介绍可选属性的值

持久化存储

POD与PVC,PV,之间的关系

pod需要使用持久化存储时,需要跟pv去申请,然后pv查看自己有没有合适的存储空间卷,有合适的就与pvc进行绑定。pv与pvc是一一对应绑定的。

pod使用pvc示例

  volumes:
    - name: html
      persistentVolumeClaim:    #指明使用pvc模式
        claimname: mypvc        #指明使用的pvc名称,下面我们需要建一个叫做mypvc的yaml资源
  • 使用yaml文件创建PVC
apiVersion: v1
kind: persisitentVolumeClaim
metadata:
  name: mypvc
  namespace: default
spec:
  accessmodes: ["ReadWriteMany"]   #一共有三种模式,下面会一一说明
  resources:      #指定资源说明
    requests:         #指定请求
      storage: 4Gi       #指定请求存储空间的大小
  • ReadWriteOnce – 该卷能够以读写模式被加载到一个节点上
  • ReadOnlyMany – 该卷能够以只读模式加载到多个节点上
  • ReadWriteMany – 该卷能够以读写模式被多个节点同时加载
  • 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01
  labels:
    name: pv01
spec:
  accessModes: ["ReadWriteMany"]
  capacity:
    storage: 5Gi

  nfs:
    server: 192.168.115.6    
    path:  /home

StorageClass-动态PVC

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: standard
# 指定存储类的供应者
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
# 指定回收策略
reclaimPolicy: Retain
mountOptions:
  - debug
posted @ 2020-06-19 17:49  亚里士多智  阅读(122)  评论(0编辑  收藏  举报