k8s1.17-数据存储-HostPath

说明

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/ 目录中的文件,仍然存在

在宿主机创建文件

如果宿主机的目录下创建一个文件,到容器中也是可以看到的


原文出处:/show_1IX6LIEZSEmw.html