说明
HostPath,故名思议:宿主机上的路径,是将Node主机中目录挂载到Pod中,供容器使用,
优点
即使Pod销毁了,数据仍然存在于Node主机上
例子
创建配置文件
创建一个volume-hostpath.yaml:
vim volume-hostpath.yaml
按 i 键
复制粘贴下面内容:
apiVersion: v1
kind: Pod
metadata:
name: volume-hostpath # pod 名字
namespace: test
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
volumeMounts:
- name: logs-volume # 指定使用 volumes 的 name 是 logs-volume
mountPath: /var/log/nginx # 容器中该目录的文件,会出现在 hostPath 的 path 指定的路径汇总
volumes:
- name: logs-volume
hostPath:
path: /root/logs # 宿主机目录
type: DirectoryOrCreate # 目录存在就使用,不存在就先创建后使用
按 esc,:wq 保存退出
参数解释:
type: DirectoryOrCreate:有以下值:- DirectoryOrCreate:目录存在就使用,不存在就先创建后使用
- Directory: 目录必须存在
- FileOrCreate: 文件存在就使用,不存在就先创建后使用
- File:文件必须存在
- Socket: unix套接字必须存在
- CharDevice: 字符设备必须存在
- BlockDevice:块设备必须存在
创建Pod
kubectl create -f volume-hostpath.yaml
执行结果如下:
pod/volume-hostpath created
查看Pod
kubectl get pod -n test -o wide
执行结果如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
volume-hostpath 1/1 Running 0 18s 10.244.1.19 node1 <none> <none>
从上面信息可知:
- pod 内部 ip是
10.244.1.19 - pod 在 node1 节点上,要到 node1 服务器上查看路径
访问nginx
通过pod 内部 IP 访问nginx,这样Nginx才能生成访问日志
curl 10.244.1.19
查看日志
在 node1 服务器查看 /root/logs 目录
注意: 下面的操作需要到Pod所在的节点运行(案例中是node1)
ls /root/logs/
执行结果如下:
access.log error.log
查看日志文件:
tail -f /root/logs/access.log
删除 pod
kubectl delete -f volume-hostpath.yaml
删除 pod 后,宿主机的 /root/logs/ 目录中的文件,仍然存在
在宿主机创建文件
如果宿主机的目录下创建一个文件,到容器中也是可以看到的