书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客
使用hostPath的存储方式,就类似于在创建docker容器时的命令docker run -v /data:/xx,意思是在物理机里的目录/data映射到容器的/xx目录里,如果删除了pod之后,则数据仍然是保留的。
步骤1:创建一个pod的yaml文件host.yaml,内容如下。
[root@vms10 volume]# cat host.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
purpose: demonstrate-envars
spec:
volumes:
- name: volume1
hostPath:
path: /data
containers:
- name: demo1
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'sleep 5000']
volumeMounts:
- mountPath: /xx
name: volume1
![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bfb4165679264e149a846eeab8cb63b8~tplv-k3u1fbpfcp-watermark.image?)
- name: demo2
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'sleep 5000']
volumeMounts:
- mountPath: /xx
name: volume1
[root@vms10 volume]#
在此yaml文件里,在volumes字段下创建了一个名字为volume1的卷,类型是hostPath,对应物理机的目录/data(由path指定)。
定义了2个容器,在每个容器里分别用volumeMounts把卷volume1挂载到本容器的/xx目录(mount Path指定),所以每个容器里目录/xx挂载的是物理机的/data目录。
步骤2:创建并查看pod。
[root@vms10 volume]# kubectl apply -f host.yaml
pod/demo created
[root@vms10 volume]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo 2/2 Running 0 11s
[root@vms10 volume]#
步骤3:查看pod的属性,确认现在使用的是HostPath。
[root@vms10 volume]# kubectl describe pod demo | grep -A3 Volumes
Volumes:
volume1:
Type: HostPath (bare host directory volume)
Path: /data
[root@vms10 volume]#
从上面可以看到,pod里的/xx挂载的是物理机的/data目录。
步骤4:查看pod所在机器。
[root@vms10 volume]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
demo 2/2 Running 0 3m14s 10.244.3.31 vms12.rhce.cc
[root@vms10 volume]#
可以看到pod是运行在vms12上的。
步骤5:在master上拷贝一个文件到此pod里demo1容器的/xx目录。
[root@vms10 volume]# kubectl cp /etc/hosts demo:/xx -c demo1
[root@vms10 volume]#
步骤6:切换到vms12,检查文件是否放在vms12的/data目录里。
[root@vms12 ~]#
[root@vms12 ~]# ls /data/
hosts
[root@vms12 ~]#
步骤7:删除此pod。