当前位置:   article > 正文

k8s hostPath

k8s hostpath

hostPath

hostPath 卷能将主机节点文件系统上的文件或目录挂载到您的 Pod 中。 虽然这不是大多数 Pod 需要的,但是它为一些应用程序提供了强大的逃生舱。

例如,hostPath 的一些用法有:

  • 运行一个需要访问 Docker 引擎内部机制的容器;请使用 hostPath 挂载 /var/lib/docker 路径。
  • 在容器中运行 cAdvisor 时,以 hostPath 方式挂载 /sys
  • 允许 Pod 指定给定的 hostPath 在运行 Pod 之前是否应该存在,是否应该创建以及应该以什么方式存在。

除了必需的 path 属性之外,用户可以选择性地为 hostPath 卷指定 type

支持的 type 值如下:

取值行为
 空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。
DirectoryOrCreate如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 Kubelet 相同的组和所有权。
Directory在给定路径上必须存在的目录。
FileOrCreate如果在给定路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644,具有与 Kubelet 相同的组和所有权。
File在给定路径上必须存在的文件。
Socket在给定路径上必须存在的 UNIX 套接字。
CharDevice在给定路径上必须存在的字符设备。
BlockDevice在给定路径上必须存在的块设备。

当使用这种类型的卷时要小心,因为:

  • 具有相同配置(例如从 podTemplate 创建)的多个 Pod 会由于节点上文件的不同而在不同节点上有不同的行为。
  • 当 Kubernetes 按照计划添加资源感知的调度时,这类调度机制将无法考虑由 hostPath 使用的资源。
  • 基础主机上创建的文件或目录只能由 root 用户写入。您需要在 特权容器 中以 root 身份运行进程,或者修改主机上的文件权限以便容器能够写入 hostPath 卷。

Pod 示例

test-pd.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test-pd
  5. spec:
  6. containers:
  7. - image: nginx
  8. name: test-container
  9. volumeMounts:
  10. # 在容器中的路径 node节点上的内容被关联到 pod containr的 /test-pd路径下 exec进入pod容器的路径内可以看到节点上的内容
  11. - mountPath: /test-pd
  12. name: test-volume
  13. volumes:
  14. - name: test-volume
  15. hostPath:
  16. # directory location on host 绑定的节点的文件路径
  17. path: /data
  18. # this field is optional 此路径类型为必须存在
  19. type: Directory

注意:

 创建pod

  1. [root@192 ~]# kubectl create -f test-pd.yaml
  2. [root@192 ~]# kubectl get pod -o wide
  3. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  4. test-pd 1/1 Running 0 65s 10.244.0.25 node1 <none> <none>
  5. [root@192 ~]# kubectl exec -it test-pd /bin/sh
  6. # ls
  7. bin dev docker-entrypoint.sh home lib64 mnt proc run srv test-pd usr
  8. boot docker-entrypoint.d etc lib media opt root sbin sys tmp var
  9. # cd test-pd #进入到上边yaml文件中的目录可以见到目录中有很多文件
  10. # ls
  11. a.txt aaa b.txt file1 log my_app01 my_app01.tar.gz nginx test test02

在node1节点上看/data目录中的文件

  1. [root@node1 /]# cd data/
  2. [root@node1 data]# ls
  3. aaa a.txt b.txt file1 log my_app01 my_app01.tar.gz nginx test test02
  4. [root@node1 data]# pwd
  5. /data

可以看到,pod容器中 指定的test-pd 路径下的内容与 /data路径下的内容一致

在容器中添加一个文件,观察对应的node节点是否有了此文件‘

  1. # echo "ccc"^[[C>c.txt
  2. # ls
  3. a.txt aaa b.txt c.txt file1 log my_app01 my_app01.tar.gz nginx test test02
  1. [root@node1 data]# ls
  2. aaa a.txt b.txt c.txt file1 log my_app01 my_app01.tar.gz nginx test test02

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/214364
推荐阅读
相关标签
  

闽ICP备14008679号