栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Node本地存储卷

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Node本地存储卷

Kubernetes管理的Node的本地存储卷(Volume)的类型:

类型描述
EmptyDir与Pod同生命周期的Node临时存储
HostPathNode目录
Local基于持久(PV)管理的Ndoe目录

一、EmptyDir

这种类型的Volume将在Pod被调度到Node时进行创建,在初始化状态下目录中时空的,所里命名为“空目录”(Empty Directory),它与Pod具有相同的生命周期,当Pod被销毁时,Node上相应的目录也会被删除。用一个Pod中的多个Container都可以挂载这种Volume,

由于EmptyDir类型的存储卷的临时性特点,它通常应用于下面场景:

  • 基于磁盘进行合并排序操作时需要的暂存空间
  • 长时间计算任务的中间检查点文件
  • 为某个Web服务提供的临时网站内容文件

    在默认情况下,kubelet会在Node的工作目录下为Pod创建EmptyDir目录,这个目录的存储介质可能是本地磁盘、SSD磁盘或者网络存储设置,取决于环境的配置。

    另外EmptyDir可以通过medium字段设置存储介质为“Memory”,表示使用基于内存文件系统(tmpfs、RAM-backed filesystem)。虽然tmpfs的读写速度非常快,但与磁盘中目录不同,在主机重启之后,tmpfs的内容就会被清空。此外tmpfs的数据将被统计为容器内存使用量,受到容器级别内存资源上线(Memory Resource Limit)的限制。

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

二、HostPath

    HostPath类型的存储卷用于将Node文件系统的目录或文件挂载到容器内部使用,对于大多数容器应用来说,都不需要使用宿主机的文件系统。适合使用HostPath存储卷的场景:

  • 容器应用的关键数据需要被持久化到宿主机上
  • 需要使用Docker中的某些内部数据,可将宿主机的/var/lib/docker目录挂载到容器内
  • 监控系统,例如cAdvisor需要采集宿主机/sys目录下内容
  • Pod启动依赖于宿主机的某个目录或文件就绪的场景

  HostPath存储卷主要配置参数path,设置为宿主机的目录或文件路径:还可以设置一个可选的参数type,表示宿主机路径的类型。

type配置参数校验规则
系统默认值,为向后兼容设置,意为系统在挂载path时不做任何校验
DirectoryOrCreatepath指定的路径必须是目录,如果不存在,则系统自动创建该目录,将权限设置为0755,与kubelet具有相同的ower和group
Directorypath指定的目录必须存在,否则挂载失败
FileOrCreatepath指定的路径必须是文件,如果不存在,则系统将自动创建该文件,将权限设置为0644,与kubelet具有相同的ower和group
filepath指定的文件必须存在,否则挂载失败
socketpath指定的UNIX socket必须存在,否则挂载失败
CharDevicepath指定的字符设备(character device)必须存在,否则挂载失败
BlockDevicepath指定的块设备(block device)必须存在,否则挂载失败

 

HostPath所使用的是宿主机的文件系统,使用时需要注意:

  • 对于具有相同HostPath设置的多个Pod(例如通过PodTemplate创建的)来说,可能被Master调度到多个Node上运行,但如果多个Node上的HostPath中文件系统(例如配置文件不同),则各Pod应用运行会出现不同的结果
  • 如果管理员设置基于存储资源情况的调度策略,则HostPath目录下的磁盘空间将无法计入Node的可用资源范围内,可能出现与预期不同的调度结果
  • 如果之前不存在的路径,则由kubelet自动创建出来的目录或文件的owner将是root,这意味着如果容器内运行的用户不是(User)不是root,则无法对该目录进行写操作,除非将容器设置为特权模式(Privileged),或者由管理员修改HostPath的权限以使非root用户可写
  • HostPath设置的宿主机目录或文件不会随着Pod的销毁而删除,在Pod不存在之后,需要管理员手动删除
    apiVersion: v1
    kind: Pod
    metadata:
      name: host-path-test-container
    spec:
      containers:
      - name: test-container
        image: tomcat
        volumeMounts:
        - name: test-volume
          mountPath: /host-data
      volumes:
      - name: test-volume
        hostPath:
          path: /host-path-test #宿主机目录
          type: DirectoryOrCreate #宿主机目录不存在是kubelet将会创建,权限为0755与Kubelet具有相同的owner和group,容器内用户不是root无法使用
          

      对于type为FileOrCreate模式的情况,需要注意的是如果挂载文件有上层目录,则系统不会字段创建上层目录,当上层目录不存在时,Pod将启动失败。这种情况下,可以将上层目录也设置为一个hostPath类型的Volume,并且设置type为DirectoryOrCreate,确保目录不存在时,系统将会自动创建该目录。

    apiVersion: v1
    kind: Pod
    metadata:
      name: hostpath-test-pod
    spec:
      containers:
      - name: test-container
        image: tomcat
        volumeMounts:
        - name: my-dir
          mountPath: /var/local/aaa
        - name: my-file
          mountPath: /var/local/aaa/1.txt
      volumes:
      - name: my-dir
        hostPath:
          path: /var/local/data          #文件1.txt的上层目录
          type: DirectoryOrCreate        #确保目录文件存在
      - name: my-file
        hostPath:
          path: /var/local/data/1.txt
          type: FileOrCreate             #确保文件存在

     

     

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584104.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号