kubernetes emptyDir存储卷(19)

2023年 7月 16日 54.7k 0

此前,在的存储卷类型介绍中,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: {} 

其中volumescontainers同一个层级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中有两类容器,一个是主容器,一个是辅助容器,两个容器使用同一个存储卷。辅助容器用来生成新的内容,主容器加载使用。如下图:emptyDir.png

gitrepo

当pod创建时候,会拉取git(依赖于宿主机git命令驱动)仓库中数据克隆到本地,并且作为存储卷定义在pod之上。gitrepo基于emptyDir,此存储卷是emptyDir,git仓库中拉取的代码存放在emptyDir后被定义到pod。其他如git使用一般无二。鉴于git使用的代码只在克隆时拉取代码,如果更新则无法同步,可配置辅助容器拉取代码,如下:gitrepo.png上述的辅助容器,那怎么实现呢?假设,我在辅助容器中执行一个脚本,每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

相关文章

LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
10分钟搞定支持通配符的永久有效免费HTTPS证书
300 多个 Microsoft Excel 快捷方式
一步步配置基于kubeadmin的kubevip高可用
istio全链路传递cookie和header灰度
REST Web 服务版本控制

发布评论