Skip to content

020节点存储卷hostPath

简介

hostPath类型的存储卷是指将工作节点上某文件系统的目录或文件挂载于Pod中的一种存储卷,它可独立于Pod资源的生命周期,因而具有持久性。但它是工作节点本地的存储空间,仅适用于特定情况下的存储卷使用需求,例如,将工作节点上的文件系统关联为Pod的存储卷,从而使得容器访问接待您文件系统上的数据。这一点在运行有管理任务的系统级Pod资源需要访问节点上的文件时比较有用。

配置hostPath存储卷的嵌套字段共有两个:一个是用于指定工作节点上的目录路径的必须按字段path ,一个是指定存储卷类型的type,它支持使用的卷类型包含如下几种:

  • DirectoryOrCreate:指定的路径不存在时自动将其创建为权限是0755的空目录,属主属组均为kubelet。
  • Directory:必须存在的目录路径
  • FileOrCreate:指定的路径不存在时自动将其创建为权限0644的空文件,属主和属组同是kubelet。
  • File:必须存在的文件路径
  • Socket:必须存在的Socket文件路径
  • CharDevice:必须存在的字符设备文件路径
  • BlockDevice:必须存在的块设备文件路径

参考yaml

yaml
apiVersion: v1
kind: Pod
metadata:
  name: vo-hostpath-pod
spec:
  containers:
    - name: filebeat
      image: ikubernetes/filebeat:5.6.7-alpine
      env: #定义变量
        - name: REDIS_HOST              #变量名
          value: 127.0.0.1:6379   #变量值
        - name: LOG_LEVEL                   #变量名
          value: info                   #变量值
      volumeMounts: #卷挂载配置
        - name: varlog                  #挂载名称为varlog的卷
          mountPath: /var/log           #挂载到容器中的/var/log目录中
        - name: socket                  #挂载名称为socket的卷
          mountPath: /var/run/docker.sock#挂载到容器中的/var/run/docker.sock
        - name: varlibdockercontainers  #挂载名称为varlibdockercontainers的卷
          mountPath: /var/lib/docker/containers#挂载到容器中的/var/lib/docker/containers目录中
          readOnly: true                #为只读挂载
  volumes: #卷配置
    - name: varlog                    #自定义的卷名称
      hostPath: #节点路径配置
        path: /var/log                #在节点上的路径
        type: DirectoryOrCreate        #节点上不存在/var/log目录时,则自动创建权限为0755的目录,属性信息为kubelet用户
    - name: varlibdockercontainers
      hostPath:
        path: /var/lib/docker/containers
        type: Directory
    - name: socket
      hostPath:
        path: /var/run/docker.sock
        type: Socket                        #节点上必须存在/var/run/docker.sock,否则创建Pod失败

警告

另外,使用hostPath存储卷时需要注意到,不同节点上的文件或许并不完全相同,于是,那些要求事先必须存在的文件或目录的满足状态也可能会有所不同;另外基于资源可用状态的调度器Pod时,hostPath资源的可用性状态不会被考虑在内;再者,在节点中创建的文件或目录默认仅有root可写,若期望容器内的进程拥有写权限,则要么将它们运行为特权容器,要么修改节点上的目录权限。

那些并非执行系统级管理任务的且不受控于Daemonset控制器的无状态应用在Pod资源被重新调度至其它节点运行时,此前创建的文件或目录大多数都不会存在。因此hostPath存储卷虽然能持久保存数据,但对被调度器按需调度的应用来说并不适用,这时需要用到的是独立于集群节点的持久性存储卷、即网络存储卷。