有没有一种方法可以共享多容器吊舱中的两个容器的文件系统?,而不使用共享卷。
我有下面的舱位清单
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容器访问/var/ jenkins _home路径,这在jenkins容器中是可用的。
这只是为了实验目的,我正在尝试学习如何在一个容器中共享文件系统/东西。
发布于 2020-02-23 15:49:30
在没有某种共享卷的情况下,无法在容器之间共享文件。
容器化系统的目标之一是使容器文件系统彼此隔离。具体而言,共享文件存在大量的实际问题(如果容器位于不同的节点上怎么办?如果你有三个副本,分别是Jenkins和Nginx?如果他们都在尝试写同样的文件呢?)一般来说,如果可能的话,最好完全避免共享文件。
在您已经展示的特定示例中,Jenkins CI系统和Nginx服务器的生命周期将完全不同;每当Jenkins构建了一些您不希望重新启动的东西时,也可以重新启动Web服务器,并且您可以很容易地想要扩展Web层而不添加Jenkins工作人员。更好的方法是让Jenkins生成自定义Docker映像,将它们推送到注册表中,然后使用Kubernetes API创建单独的Nginx部署。
在大多数情况下(特别是由于缩放的考虑),您应该完全避免使用多容器吊舱。
(这种设置确实有意义的一个更具体的例子是,如果您将凭据存储在类似Hashicorp服务器的某个地方。您需要一个init容器来连接到Vault,检索凭证,并将它们存放在一个emptyDir卷中,然后主容器就可以开始获得这些凭据了。就主服务器容器而言,它是这个吊舱的唯一重要部分,从逻辑上讲,吊舱不过是带有一些辅助设备的服务器容器。)
发布于 2020-02-23 18:23:24
下面的示例将帮助您如何在cobtainers之间共享卷。
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"]https://stackoverflow.com/questions/60363385
复制相似问题