ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Pod 中运行的多个容器可以共享 Pod 级别的存储卷 Volume,可以使用`emptyDir`类型的存储卷作为 Pod 内部的空目录,用于 Pod 中运行的多个容器间的数据共享。当 Pod 被分配到 Node 上时,存储卷 Volume 最先被创建,并且存储卷的存在时间与 Pod 存活时间相同。 对于多容器 Pod 共享 Volume 的常见用法是:一个容器写日志或其它数据文件到共享目录中,其它容器从这个共享目录中读取数据。比如我们创建一个 Pod 包含两个容器,其中 tomcat 容器用于向 “app-logs” Volume 中写入日志文件,而 busybox 容器用于从 “app-logs” Volume 中读取日志文件并打印。 在`/home/shiyanlou`目录下新建`tomcat-busybox.yaml`文件并向其中写入如下内容: ~~~yaml apiVersion: v1 kind: Pod metadata: name: tomcat-busybox-pod spec: containers: - name: tomcat image: tomcat ports: - containerPort: 8080 volumeMounts: - name: app-logs mountPath: /usr/local/tomcat/logs # 将共享卷 app-logs 挂载到 tomcat 容器内的 /usr/local/tomcat/logs 目录下 - name: busybox image: busybox command: ['sh', '-c', 'tail -f /logs/catalina*.log'] volumeMounts: - name: app-logs mountPath: /logs # 将共享卷 app-logs 挂载到 busybox 容器内的 /logs 目录下 volumes: - name: app-logs emptyDir: {} ~~~ 上面的 YAML 文件创建以后,tomcat 容器在启动后会向 /usr/local/tomcat/logs 目录下写日志文件,而 busybox 容器就可以读取其中的日志文件了。 执行创建: ~~~bash $ kubectl create -f tomcat-busybox.yaml pod/tomcat-busybox-pod created # 这里的 2/2 表示两个容器都启动成功了 $ kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-busybox-pod 2/2 Running 0 50s # 查看详细的创建过程(包括 Volumes 和 Events),可以看到两个容器依次被创建了起来 $ kubectl describe pod tomcat-busybox-pod ...... Volumes: app-logs: Type: EmptyDir (a temporary directory that shares a pod's lifetime) ...... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m9s default-scheduler Successfully assigned default/tomcat-busybox-pod to kube-node-1 Normal Pulling 2m8s kubelet, kube-node-1 Pulling image "tomcat" Normal Pulled 100s kubelet, kube-node-1 Successfully pulled image "tomcat" Normal Created 100s kubelet, kube-node-1 Created container tomcat Normal Started 100s kubelet, kube-node-1 Started container tomcat Normal Pulling 100s kubelet, kube-node-1 Pulling image "busybox" Normal Pulled 93s kubelet, kube-node-1 Successfully pulled image "busybox" Normal Created 93s kubelet, kube-node-1 Created container busybox Normal Started 93s kubelet, kube-node-1 Started container busybox ~~~ busybox 容器的启动命令为`tail -f /logs/catalina*.log`,我们通过`kubelet logs`命令查看 busybox 容器的输出内容,busybox 容器打印的是日志文件 /usr/local/tomcat/logs/catalina..log 中的内容: ~~~bash $ kubectl logs tomcat-busybox-pod -c busybox ...... 26-Sep-2019 09:56:26.653 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/docs] 26-Sep-2019 09:56:26.687 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [34] ms 26-Sep-2019 09:56:26.691 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 26-Sep-2019 09:56:26.702 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 26-Sep-2019 09:56:26.705 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 822 ms ~~~ 现在进入 tomcat 容器中查看日志信息是否相同: ~~~bash $ kubectl exec -it tomcat-busybox-pod -c tomcat -- ls /usr/local/tomcat/logs catalina.2019-09-26.log localhost_access_log.2019-09-26.txt host-manager.2019-09-26.log manager.2019-09-26.log localhost.2019-09-26.log $ kubectl exec -it tomcat-busybox-pod -c tomcat -- tail /usr/local/tomcat/logs/catalina.2019-09-26.log ...... 26-Sep-2019 09:56:26.653 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/docs] 26-Sep-2019 09:56:26.687 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [34] ms 26-Sep-2019 09:56:26.691 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 26-Sep-2019 09:56:26.702 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 26-Sep-2019 09:56:26.705 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 822 ms ~~~ 这就表明 Pod 中的两个容器确实共享了一个 Volume。