此前,在的存储卷类型介绍中,emptyDir只在节点本地使用。创建一个pod,一个存储卷,pod被删除,存储卷也会被删除.empryDir数据随着pod的创建而创建,随着删除而删除empryDir可以当临时目录,或者缓存使用(关联宿主机的目录可以是宿主机的内存,将内存放到pod存储卷)。没有持久化。本次将详细实验一下emptyDir的用法
emptyDir存储卷
1,pod上定义volume,volume指明关联的存储设备2,容器中使用存储卷挂载在emptyDir中,可以使用Memory或者disk(medium).sizeLimit(大小)
- 定义emptyDir
volumes:
- name: linuxea-code
emptyDir: {}
其中volumes
与containers
同一个层级emptyDir: {}
{}为空,没有键值,大小不限制,命名叫linuxea-code
在镜象里面使用volumeMounts
挂载,如下:
volumeMounts:
- name: linuxea-code
mountPath: /data/wwwroot/
mountPath
挂载路径,- name
挂载名称,与`emptyDir
定义一致。顺序是先挂载存储卷而后启动,yaml文件如下:
[root@linuxea volume]# cat emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: linuxea-emptydir
namespace: default
labels:
www: linuxea-com
tier: backend
annotations:
www.linuxea.com/ops-by: "linuxea admin"
spec:
containers:
- name: linuxea-pod1-com
image: "marksugar/nginx:1.14.a"
ports:
- containerPort: 88
volumeMounts:
- name: linuxea-code
mountPath: /data/wwwr oot/
- name: linuxea-pod2-com
image: "marksugar/nginx:1.14.b"
ports:
- containerPort: 88
volumeMounts:
- name: linuxea-code
mountPath: /data/wwwroot/
volumes:
- name: linuxea-code
emptyDir: {}
apply
[root@linuxea volume]# kubectl apply -f emptyDir.yaml
pod/linuxea-emptydir created
[root@linuxea volume]# kubectl get pods
NAME READY STATUS RESTARTS AGE
linuxea-emptydir 2/2 Running 0 2s
进入第一个pod内的容器linuxea-pod1-com
在共享的目录/data/wwwroot下写入一个文件echo "$(date)_linuxea-pod1-com" >> /data/wwwroot/index.html
[root@linuxea volume]# kubectl exec -it linuxea-emptydir -c linuxea-pod1-com -- /bin/sh
/ # echo "$(date)_linuxea-pod1-com" >> /data/wwwroot/index.html
/ # cat /data/wwwroot/index.html
linuxea-linuxea-emptydir.com-127.0.0.1/8 172.16.4.253/24
Wed Sep 19 15:28:40 UTC 2018_linuxea-pod1-com
而后在第二个pod的容器linuxea-pod2-com
可以查看到写入的内容。
[root@linuxea volume]# kubectl exec -it linuxea-emptydir -c linuxea-pod2-com -- /bin/sh
/ # cat /data/wwwroot/index.html
linuxea-linuxea-emptydir.com-127.0.0.1/8 172.16.4.253/24
Wed Sep 19 15:28:40 UTC 2018_linuxea-pod1-com
/ # echo "$(date)_linuxea-pod2-com" >> /data/wwwroot/index.html
说明共享是有效的
/ # cat /data/wwwroot/index.html
linuxea-linuxea-emptydir.com-127.0.0.1/8 172.16.4.253/24
Wed Sep 19 15:28:40 UTC 2018_linuxea-pod1-com
Wed Sep 19 15:32:17 UTC 2018_linuxea-pod2-com
辅助容器
在一个pod中有两类容器,一个是主容器,一个是辅助容器,两个容器使用同一个存储卷。辅助容器用来生成新的内容,主容器加载使用。如下图:
gitrepo
当pod创建时候,会拉取git(依赖于宿主机git命令驱动)仓库中数据克隆到本地,并且作为存储卷定义在pod之上。gitrepo基于emptyDir,此存储卷是emptyDir,git仓库中拉取的代码存放在emptyDir后被定义到pod。其他如git使用一般无二。鉴于git使用的代码只在克隆时拉取代码,如果更新则无法同步,可配置辅助容器拉取代码,如下:上述的辅助容器,那怎么实现呢?假设,我在辅助容器中执行一个脚本,每5分钟重新拉取最新的代码到容器内。那么是否完成了一次更新?
简单的测试下。每一秒钟运行一下向存储卷目录写入内容来模拟辅助容器的用法
[root@linuxea volume]# cat emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: linuxea-emptydir
namespace: default
labels:
www: linuxea-com
tier: backend
annotations:
www.linuxea.com/ops-by: "linuxea admin"
spec:
containers:
- name: linuxea-pod1-com
image: "marksugar/nginx:1.14.a"
ports:
- containerPort: 88
volumeMounts:
- name: linuxea-code
mountPath: /data/wwwroot/
- name: linuxea-pod2-com
image: "marksugar/nginx:1.14.b"
ports:
- containerPort: 88
volumeMounts:
- name: linuxea-code
mountPath: /data/wwwroot/
command:
- "/bin/sh"
args: ["-c","while true;do echo linuxea-pod2-com $(date) >> /data/wwwroot/index.html;sleep 1;done"]
volumes:
- name: linuxea-code
emptyDir: {}
[root@linuxea volume]# kubectl apply -f emptyDir.yaml
pod/linuxea-emptydir created
通过 kubectl get pods -o wide
查看状态
[root@linuxea volume]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
linuxea-emptydir 2/2 Running 0 8s 172.16.4.4 linuxea.node-2.com <none>
而后通过集群内ip访问
linuxea-linuxea-emptydir.com-127.0.0.1/8 172.16.4.4/24
linuxea-pod2-com Thu Sep 20 05:22:20 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:21 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:22 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:23 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:24 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:25 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:26 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:27 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:28 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:29 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:30 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:31 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:32 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:33 UTC 2018
linuxea-pod2-com Thu Sep 20 05:22:34 UTC 2018