40、k8s-数据存储-基本存储-HostPath(节点主机存储)
HostPath即使将node主机中的一个实际的目录挂载到pod中、以供容器使用、这样的设计就可以保证pod销毁了、但是数据依然可以存在Node主机上
案例:
1、创建yaml文件:
----------------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
name: volume-hostpath
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
volumeMounts:
- name: logs-volume
mountPath: /var/log/nginx #将容器中的nginx目录下的文件挂载到node-1主机的/root/logs 目录下
- name: busybox #辅助容器,用于查看 nginx 访问日志。
image: busybox:1.30
command: ["/bin/sh","-c","tail -f /logs/access.log"] #将主机的 /root/logs 目录下的 access.log 文件的内容输出到终端。
volumeMounts:
- name: logs-volume
mountPath: /logs
volumes:
- name: logs-volume #卷名
hostPath: #卷类型
path: /root/logs
type: DirectoryOrCreate #目录存在就使用、不存在就创建
#这里volumes 的意思是:将主机上的/root/logs 目录挂载到 上面两个容器(以logs-volume命名的卷)的/var/log/nginx 和 /logs 上
#所以主机上的/root/logs/下会出现两个容器的目录文件
------------------------------------------------------------------------------------------------------------------------------
2、创建pod:kubectl create -f volume-hostpath.yaml
3、查看pod信息:kubectl get pods volume-hostpath -ndev -owide
------------------------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
volume-hostpath 2/2 Running 0 70s 10.244.1.96 node-1 <none> <none>
#这里显示pod运行在node-1节点上、所以juan挂载在node-1上的/root/logs下
-------------------------------------------------------------------------------------------------------------
4、去到node-1节点的主机上找到、root/logs/目录下:
----------------------------------------------------
access.log error.log
#有两个文件
--------------------------------------------------
5、实时查看日志:tail -f access.log
6、master主机上访问nginx:curl 10.244.1.96:80
7、测式将pod删除、然后查看node-1节点主机上是否还存在日志文件:
·master节点主机上输入:kubectl delete -f volume-hostpath.yaml
·node-1节点上查看logs目录是否还存在日志文件: