当前位置 博文首页 > 阳阳的博客:【K8S】Volume类型-EmptyDir与HostPath的区别

    阳阳的博客:【K8S】Volume类型-EmptyDir与HostPath的区别

    作者:[db:作者] 时间:2021-08-15 10:06

    ?

    我们知道,一个运行中的容器,默认情况下,对文件系统的写入,都是发生在其分层文件系统的可写层的,一旦容器运行结束,所有写入都会被丢弃。因此需要支持容器数据的持久化。

    k8s中通过Volume来提供对容器存储的支持。


    Volume类型

    volume是kubernetes Pod中多个容器访问的共享目录。volume被定义在pod上,被这个pod的多个容器挂载到相同或不同的路径下。volume的生命周期与pod的生命周期相同,pod内的容器停止和重启时一般不会影响volume中的数据。所以一般volume被用于持久化pod产生的数据。

    Kubernetes提供了众多的volume类型,现在列出一部分,具体可以参考官方文档

    • emptyDir
    • hostPath
    • gcePersistentDisk
    • awsElasticBlockStore
    • nfs
    • iscsi
    • flocker
    • glusterfs
    • rbd
    • cephfs
    • gitRepo
    • secret
    • persistentVolumeClaim
    • downwardAPI
    • azureFileVolume
    • azureDisk
    • vsphereVolume
    • Quobyte

    本篇文章我们简单说下emptyDir和hostPath。


    emptyDir

    emptyDir的生命周期与所属的pod相同。pod删除时,其emptyDir中的数据也会被删除。

    emptyDir类型的volume在pod分配到node上时被创建,kubernetes会在node上自动分配 一个目录,因此无需指定宿主机node上对应的目录文件。

    emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。

    下面是一个pod挂载emptyDir的示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
    spec:
      containers:
      - image: test-webserver
        name: test-container
        volumeMounts:
        - name: cache-volume
          mountPath: /cache
      volumes:
      - name: cache-volume
        emptyDir: {}

    hostPath

    pod删除或者是调度到另外一个Node,原先Node上的存储卷还在。

    hostPath Volume为pod挂载宿主机上的目录或文件,使得容器可以使用宿主机的文件系统进行存储。缺点是,在k8s中,pod都是动态在各node节点上调度。当一个pod在当前node节点上启动并通过hostPath存储了文件到本地以后,下次调度到另一个节点上启动时,就无法使用在之前节点上存储的文件。

    hostPath使用示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-pod
    spec:
      containers:
      - image: test-webserver
        name: test-container
        volumeMounts:
        - name: test-volume
          mountPath: /www
      volumes:
      - name: test-volume
        hostPath:
          path: /data

    当然也可以为?hostPath?卷指定?type:

    行为

    ?

    空字符串(默认)用于向后兼容,在挂载 hostPath 卷之前不会执行任何检查

    DirectoryOrCreate

    将根据需要在那里创建一个空目录,权限设置为 0755,与 Kubelet 具有相同的组和权限

    Directory

    给定的路径下必须存在目录

    FileOrCreate

    会根据需要创建一个空文件,权限设置为 0644,与 Kubelet 具有相同的组和权限

    File

    给定的路径下必须存在文件

    Socket

    给定的路径下必须存在 UNIX 套接字

    CharDevice

    给定的路径下必须存在字符设备

    BlockDevice

    给定的路径下必须存在块设备


    更多详细的内容:

    【kubernetes/k8s源码分析】 k8s hostpath storage 源码分析

    emptyDir、hostPath以及local volume都是Kubernetes的本地存储卷,那么有何不同?

    cs
    下一篇:没有了