尝试在 Pod 内的两个容器之间共享文件,我必须使用卷并在该卷的口路径中创建文件。
apiVersion: v1
kind: Pod
metadata:
name: pod-5
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "if [ -f /workdir/foo ]; then sleep 3600; else exit; fi"]
volumeMounts:
- name: workdir
mountPath: "/workdir"
initContainers:
- name: install
image: busybox
command: ["sh", "-c", "touch /workdir/foo; hostname > /workdir/foo"]
volumeMounts:
- name: workdir
mountPath: "/workdir"
volumes:
- name: workdir
emptyDir: {}
Run Code Online (Sandbox Code Playgroud)
如果我不使用卷并在 init 容器中创建一个文件并尝试从其他容器中读取它,它将无法工作。
apiVersion: v1
kind: Pod
metadata:
name: pod-5
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "if [ -f /workdir/foo ]; then sleep 3600; else exit; fi"]
initContainers:
- name: install
image: busybox
command: ["sh", "-c", "touch /workdir/foo; hostname > /workdir/foo"]
Run Code Online (Sandbox Code Playgroud)
为什么?我认为 Pod 中的所有容器都应该共享网络和文件系统。
让\xe2\x80\x99s 首先解释一下 Pod 是什么。Pod 是 Kubernetes 可以部署和管理的最小单元。换句话说,如果您需要在 Kubernetes 中运行单个容器,那么您需要为该容器创建一个 Pod。同时,一个 Pod 可以包含多个容器,通常是因为这些容器耦合得比较紧密。耦合有多紧密?好吧,这样想:pod 中的容器代表在前容器世界中在同一服务器上运行的进程。
\n\n现在,将 pod 想象为在您尝试运行容器的本地计算机中。
\n举例来说,您有两个容器 initcontainer(容器 1)和主容器(容器 2)在同一网络中运行。它们都在您的本地环境中运行。现在,如果您在一个容器中创建一个文件并期望文件存在于其他容器中,这根本不是真的。该文件存在于其自己的文件系统中的不同容器中,其他容器无法访问它。但是要在两个容器之间共享文件系统,您可以创建从本地到容器 1 的卷挂载,然后以相同的路径挂载到容器 2。这样两个容器就可以共享文件系统。
同样的事情也适用于 kubernetes 环境中的 Pod。
\n在 Kubernetes 中,您可以使用共享 Kubernetes Volume 作为在 Pod 中的容器之间共享数据的简单而高效的方式。对于大多数情况,使用主机上与 Pod 内的所有容器共享的目录就足够了
归档时间: |
|
查看次数: |
4680 次 |
最近记录: |