2025,每天10分钟,跟我学K8S(三十一)- 对象属性 - Volume - hostPath

        hostPath,顾名思义,就是将主机的目录挂载到pod里面,这样可以将pod里面产生的数据永久保留到主机的磁盘里面,也可以反过来将主机中的文件共享到pod中,例如可以将主机中的hosts文件挂载到多个pod,每次只需要修改主机的hosts文件即可。

        上面说的他的几个好处,坏处当然也是有不少,比如多个pod共享同一个hostpath,如果这些pod同时产生数据写入,有可能爆发数据冲突,同时pod产生的数据并不会随着pod删除而消失,会积累在主机的磁盘越来越大,浪费主机性能。

一、适用场景:

  • 访问节点资源:如读取节点日志(/var/log)、硬件信息(/sys
  • 开发调试:临时挂载配置文件或工具到容器。
  • 特殊需求:需要直接操作节点文件系统的场景(如自定义设备驱动)。

二、配置示例

1. 基础配置

创建一个nginx的容器,并且将主机的/var/log 目录挂载到pod内部。

yaml文件演示

apiVersion: v1
kind: Pod
metadata:
  name: hostpath-demo
spec:
  containers:
    - name: nginx
      image: m.daocloud.io/docker.io/nginx
      command: ["sh", "-c", "tail -f /dev/null"]
      volumeMounts:
        - name: node-logs
          mountPath: /host-logs
  volumes:
    - name: node-logs
      hostPath:
        path: /var/log          # 节点上的路径
        type: DirectoryOrCreate # 路径类型(见下文说明)

2. 路径类型(type 字段)​

类型说明
Directory路径必须为已存在的目录,否则 Pod 启动失败
DirectoryOrCreate路径不存在时自动创建目录(权限默认为 0755,属主为 kubelet)
File路径必须为已存在的文件,否则 Pod 启动失败
FileOrCreate路径不存在时自动创建空文件(权限 0644,属主为 kubelet)
Socket路径必须为已存在的 Unix 套接字
CharDevice路径必须为已存在的字符设备
BlockDevice路径必须为已存在的块设备

3. 结果验证

三、典型使用场景

1. 收集节点日志

启动一个日志收集的pod,共享节点的/var/log,并且将这个目录进行收集

volumes:
  - name: node-log
    hostPath:
      path: /var/log
      type: Directory
  • 用途:Sidecar 容器读取节点日志并上传到日志系统(如 ELK)。

2.  硬件监控

启动一个监控的pod,共享节点的/sys,并且将这个目录下的指标进行收集

volumes:
  - name: sys-dir
    hostPath:
      path: /sys
      type: Directory
  • 用途:读取硬件指标(如温度传感器数据)。

​四、与 emptyDir 的对比

特性hostPathemptyDir
数据持久性与节点本地存储一致Pod 删除后数据丢失
共享范围同一节点的所有 Pod仅同一 Pod 内的容器
典型用途节点级数据访问临时数据交换
安全风险高(需严格限制路径)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值