是否有一种方法可以在多容器容器中共享两个容器的文件系统? 不使用共享卷?
我有以下吊舱清单
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: pod
name: pod
spec:
replicas: 1
selector:
matchLabels:
app: pod
template:
metadata:
labels:
app: pod
spec:
containers:
- image: nginx:latest
name: nginx
- image: jenkins
name: jenkins
我想从nginx容器访问jenkins容器中可用的/ var / jenkins_home路径。
这只是出于实验目的,我正在尝试学习在容器中的各个容器之间共享文件系统/事物的方法。
答案 0 :(得分:2)
没有某种共享卷,您将无法在容器之间共享文件。
容器化系统的部分目标是容器文件系统彼此隔离。专门共享文件有很多实际问题(如果容器在不同的节点上会怎样?如果Jenkins和Nginx每个都有三个副本该怎么办?如果它们都试图写相同的文件怎么办?)一般情况下,最好避免完全共享文件。
在您显示的特定示例中,Jenkins CI系统和Nginx服务器的生命周期将根本不同。每当Jenkins构建某些内容时,您都不希望重新启动它也要重新启动Web服务器,并且您很容易想要在不增加Jenkins worker的情况下扩展Web层。更好的方法是让Jenkins生成自定义Docker映像,将其推送到注册表,然后使用Kubernetes API创建单独的Nginx部署。
在大多数情况下(尤其是出于缩放方面的考虑),应完全避免使用多容器容器。
(这种设置有意义的一个更具体的例子是,如果您将凭据存储在Hashicorp Vault服务器之类的地方。您需要一个初始化容器才能连接到Vault,然后检索凭据,然后将它们存放在emptyDir
卷中,然后主容器就可以开始获取这些凭据了。就主服务器容器而言,它是该容器的唯一重要部分,从逻辑上讲,该容器只不过是带有一些辅助内容的服务器容器。)
答案 1 :(得分:0)
下面的示例将帮助您如何在共享容器中共享体积
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]