hostPath

hostPath卷指向Node本地的文件系统,可以将Node文件系统上特定文件或目录挂载至Pod的容器中,因此其可以实现数据的持久化存储。

hostPath卷的生命周期与Pod的生命周期不一致,因此,随着Pod的删除,hostPath卷并不会随之删除,重新生成的Pod若同样挂载Node下的该路径映射的hostPath卷,则会看到之前的Pod存放在其中的数据。

因此,hostPath卷只能在单节点集群中使用,因为Pod的数据只会被保存至其所处的Node的文件系统中,在多节点集群中,其他Node中并没有该Pod存储的数据。

可以用下图来表示hostPath卷被使用时的情况:

hostPath卷将Node上的文件或目录挂载至容器的文件系统中

创建hostPath卷

hostPath卷因为是将Node的文件系统中的文件或目录挂载至Pod中的容器中,因此在配置时,需要指定Node上需要挂载的文件或目录。

hostPath卷的创建分为以下两步:

  1. 定义卷:在Pod的spec.volumes中定义卷,并且在spec.volumes.hostPath中定义该卷相关的配置,主要是path,即Node上需要被挂载的文件或目录路径;

  2. 挂载卷:在Pod的spec.containers.volumeMounts中指定挂载点和挂载的卷名;

下面举一个例子,创建一个名为mongodb的Pod,其在内部的名为mongodb的容器的/data/db下挂载一个名为mongodb-data的hostPath卷,该卷映射的是Node上的/tmp/mongodb路径:

apiVersion: v1
kind: Pod
metadata:
  name: mongodb 
spec:
  volumes:    # 定义卷
  - name: mongodb-data    # (必须)卷名
    hostPath:    # 定义一个hostPath卷
      path: /tmp/mongodb    # (必须)需要挂载的Node上的文件或目录路径
  containers:
  - image: mongo
    name: mongodb
    volumeMounts:    # 挂载点
    - name: mongodb-data    # (必须)需要挂载的卷名
      mountPath: /data/db    # (必须)挂载至容器的文件系统中的路径
    ports:
    - containerPort: 27017
      protocol: TCP

Last updated

Was this helpful?