Kubernetes认证考试自学系列 | emptyDir

书籍来源:《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。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/130689595
今日推荐