hostPath

hostPath为在Pod上挂载宿主机上的文件或目录,它通常可以用于以下几方面:

  • 容器应用程序生成的日志文件需要永久保存时,可以使用宿主机的高速文件系统进行存储。

  • 需要访问宿主机上Docker引擎内部数据结构的容器应用时,可以通过定义hostPath为宿主机/var/lib/docker目录,使容器内部应用可以直接访问Docker的文件系统

示例

以下为使用 hostPath 卷的示例,实现将主机的/etc/timezone文件挂载到Pod的/etc/timezone:

nginx-hostPath.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-hostpath
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-hostpath
  template:
    metadata:
      labels:
        app: nginx-hostpath
    spec:
      volumes:
      - hostPath:
          path: /etc/timezone
        name: timezone
      containers:
      - name: nginx-hostpath
        image: nginx:1.25.3
        volumeMounts:
        - mountPath: /etc/timezone
          name: timezone
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 80

在使用这种类型的Volume时,需要注意以下几点:

  • 在不同的Node上具有相同配置的Pod,可能会因为宿主机上的目录和文件不同而导致对Volume上目录和文件的访问结果不一致

  • 如果使用了资源配额管理,则Kubernetes无法将hostPath在宿主机上使用的资源纳入管理。

在配置HostPath时,有一个type的参数,用于表达不同的挂载类型,HostPath卷常用的type(类型)如下:

  • type为空字符串默认选项,意味着挂载hostPath卷之前不会执行任何检查。

  • DirectoryOrCreate:如果给定的path不存在任何东西,那么将根据需要创建一个权限为0755的空目录,和Kubelet具有相同的组和权限。

  • Directory:目录必须存在于给定的路径下。

  • FileOrCreate:如果给定的路径不存在任何东西,则会根据需要创建一个空文件,权限设置为0644,和Kubelet具有相同的组和所有权。

  • File:文件,必须存在于给定路径中。

  • Socket:UNIX套接字,必须存在于给定路径中。

  • CharDevice:字符设备,必须存在于给定路径中。

  • BlockDevice:块设备,必须存在于给定路径中。

最后更新于