k8s hostPath
hostPathhostPath卷能将主机节点文件系统上的文件或目录挂载到您的 Pod 中。 虽然这不是大多数 Pod 需要的,但是它为一些应用程序提供了强大的逃生舱。例如,hostPath的一些用法有:运行一个需要访问 Docker 引擎内部机制的容器;请使用hostPath挂载/var/lib/docker路径。在容器中运行 cAdvisor 时,以hostPath方式挂载/sys。允许 Po
·
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
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: test-container
volumeMounts:
# 在容器中的路径 node节点上的内容被关联到 pod containr的 /test-pd路径下 exec进入pod容器的路径内可以看到节点上的内容
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
hostPath:
# directory location on host 绑定的节点的文件路径
path: /data
# this field is optional 此路径类型为必须存在
type: Directory
注意:
创建pod
[root@192 ~]# kubectl create -f test-pd.yaml
[root@192 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-pd 1/1 Running 0 65s 10.244.0.25 node1 <none> <none>
[root@192 ~]# kubectl exec -it test-pd /bin/sh
# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv test-pd usr
boot docker-entrypoint.d etc lib media opt root sbin sys tmp var
# cd test-pd #进入到上边yaml文件中的目录可以见到目录中有很多文件
# ls
a.txt aaa b.txt file1 log my_app01 my_app01.tar.gz nginx test test02
在node1节点上看/data目录中的文件
[root@node1 /]# cd data/
[root@node1 data]# ls
aaa a.txt b.txt file1 log my_app01 my_app01.tar.gz nginx test test02
[root@node1 data]# pwd
/data
可以看到,pod容器中 指定的test-pd 路径下的内容与 /data路径下的内容一致
在容器中添加一个文件,观察对应的node节点是否有了此文件‘
# echo "ccc"^[[C>c.txt
# ls
a.txt aaa b.txt c.txt file1 log my_app01 my_app01.tar.gz nginx test test02
[root@node1 data]# ls
aaa a.txt b.txt c.txt file1 log my_app01 my_app01.tar.gz nginx test test02
更多推荐
已为社区贡献19条内容
所有评论(0)