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存储卷虽然能持久保存数据,但对被调度器按需调度的应用来说并不适用,这时需要用到的是独立于集群节点的持久性存储卷、即网络存储卷。

