购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2.2 容器之间文件共享

假设有一个Nginx应用程序和一个用于采集Nginx访问日志的日志采集程序。这两个应用程序之间存在“密切协作关系”,因此将它们定义在同一个Pod中,如图3-4所示。

在这种环境下,我们会想到一个问题:日志采集程序是否可以读取到Nginx的访问日志文件呢?

你的答案可能是否定的,因为这两个容器的文件系统是隔离的。

不过,在Pod中,我们可以通过配置“Volume”(卷)轻松实现数据的共享。具体来说,当创建一个Pod时,Kubernetes首先在Pod所在节点的文件系统上创建一个空目录,然后将该目录挂载到容器的日志目录中,如图3-5所示。

图3-4 Pod中定义的多个容器

图3-5 Pod中容器之间的数据共享

通过这种方式,在Nginx容器的“/var/log/nginx”目录写入文件后,日志采集程序容器的“/var/log/nginx”目录中也可以访问和使用该文件。

接下来,运行一个Pod来验证这个结论。创建一个名为“pod-volume.yaml”的文件,内容如下:

创建Pod资源:

     [root@k8s-master ~]# kubectl apply -f pod-volume.yaml

查看Pod对象:

进入“web”容器中,在挂载目录下创建一个文件:

     [root@k8s-master ~]# kubectl exec -it pod-volume -c web -- bash
     [root@pod-volume /]# cd /var/log/nginx/
     [root@pod-volume /]# touch file.log

同样,你也可以在“collect”容器的挂载目录下看到创建的文件:

     [root@k8s-master ~]# kubectl exec -it pod-volume -c collect -- bash
     [root@pod-volume /]# ls /var/log/nginx/
     access.log  error.log  file.log

这说明“web”和“collect”容器共享“/var/log/nginx”日志目录。

小结:通过创建一个“Pause容器”并将应用容器加入该容器的网络命名空间中,实现了网络共享。通过将“Volume”挂载到应用容器的数据目录中,实现了数据共享。实现这两种共享机制的前提是必须确保Pod中的所有容器都运行在同一节点上,这也说明了为什么Pod是最小调度单元。 zbL13vkpzavkdylG9zaoIaev08x9mxH0QlvyOq4gyCjws04XpbYJSZmuJ7yEGL9a

点击中间区域
呼出菜单
上一章
目录
下一章
×