书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Kubernetes认证考试自学系列 | 汇总_COCOgsta的博客-CSDN博客
使用emptyDir的存储方式,就类似于在创建docker容器时的命令docker run -v /xx,意思是在物理机里随机地产生一个目录,然后把这个目录挂载到容器的/xx目录里。这种存储是临时性的,是以内存作为介质的,并非是永久性的。
为了和其他章节创建的pod做区别,本章所有实验均在一个新的命令空间里操作。
步骤1:创建命名空间nsvolume并切换至此命名空间。
[root@vms10 ~]# kubectl create ns nsvolume
namespace/volume created
[root@vms10 ~]#
[root@vms10 ~]# kubens nsvolume
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "nsvolume".
[root@vms10 ~]#
步骤2:创建目录volume并cd进去。
[root@vms10 ~]# mkdir volume ; cd volume/
[root@vms10 volume]#
步骤3:创建一个pod的yaml文件emp.yaml,按如下内容进行修改。
[root@vms10 volume]# ca emp.yaml
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aa: aa
spec:
volumes:
- name: volume1
emptyDir: {}
- name: volume2
emptyDir: {}
containers:
- name: demo1
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'sleep 5000']
volumeMounts:
- mountPath: /xx
name: volume1
- name: demo2
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'sleep 5000']
volumeMounts:
- mountPath: /xx
name: volume1
[root@vms10 volume]#
这里创建了2个名字为volume1和volume2的卷,类型都是emptyDir,在此pod里创建了2个容器demo1和demo2。在每个容器里通过volumeMounts选项来挂载卷,其中name指定挂载哪个卷,mountPath指定了卷在本容器里的挂载点,这里两个容器都是把卷volume1挂载到容器的/xx目录里。
步骤4:创建pod并查看pod运行状态。
[root@vms10 volume]# kubectl apply -f emp.yaml
pod/demo created
[root@vms10 volume]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo 2/2 Running 0 8s
[root@vms10 volume]#
步骤5:查看此pod的描述信息。
[root@vms10 volume]# kubectl describe pod demo | grep -A2 Volumes
Volumes:
volume1:
Type: EmptyDir (a temporary directory that shares apod's lifetime)
[root@vms10 volume]#
可以看到此pod现在使用的是emptyDir类型的存储。
步骤6:查看pod运行在哪台主机。
[root@vms10 volume]# kubectl get pods -o wide --no-headers
demo 2/2 Running 0 47s 10.244.3.29 vms12.rhce.cc
[root@vms10 volume]#
步骤7:切换到vms12机器,找到对应的容器。
[root@vms12 ~]# docker ps | grep demo
d3150d1c569e docker.io/busybox@sha256:9fd90 "sh -c 'sleep 5000'" 2 minutes ago Up 2 minutes k8s_demo2_demo_nsvolume_75491932-ae81-11e9-8865-000c294d4f7c_0
5e9c9e41b8ea docker.io/busybox@d9ab70 "sh -c 'sleep 5000'" 2 minutes ago Up 2 minutes kBs_demo1_demo_nsvolume_75491932-ae81-11e9-8865-000c294d4f7c_0
可以看到在master上创建的demo这个pod所对应的两个容器的id分别是d3150d1c569e和5e9c9e41b8ea。
步骤8:查看它们对应的属性。
[root@vms12 ~]# docker inspect d3150d1c569e
...
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/kubelet/pods/75491932-ae81-11e9-8865-000c294d4f7c/volumes/kubernetes.io-empty-dir/volume1",
"Destination": "/xx",
...
[root@vms12 ~]#
[root@vms12 ~]# docker inspect 5e9c9e41b8ea
...
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/kubelet/pods/75491932-ae81-11e9-8865-000c294d4f7c/volumes/kubernetes.io-empty-dir/volume1",
"Destination": "/xx",
[root@vms12 ~]#
可以看到两个容器里都有/xx,且都对应到同一个物理目录
/var/lib/kubelet/pods/7549132-ae81-11e9-8865-000c294d4f7c/volumes/kubernetes.io~empty-dir/volume1里。
步骤9:在master上随便拷贝一个文件到这个pod里容器demo1的/xx目录。
[root@vms10 volume]# kubectl cp /etc/hosts demo:/xx -c demo1
[root@vms10 volume]#
步骤10:查看demo这个pod里容器demo2的/xx目录。
[root@vms10 volume]# kubectl exec demo -c demo2 -- ls /xx
[root@vms10 volume]#
可以看到这里也有数据,因为demo1和demo2都挂载的同一个卷,实现了数据的共享。
步骤11:切换到vms12。
[root@vms12 ~]# ls /var/lib/kubelet/pods/75491932-ae81-11e9-8865-000c294d47c/volumes/kubernetes.io~empty-dir/volume1
[root@vms12 ~]#
可以看到有hosts文件。
步骤12:删除此pod。