跨容器中的容器共享文件系统

时间:2020-02-23 14:47:53

标签: kubernetes

是否有一种方法可以在多容器容器中共享两个容器的文件系统? 不使用共享卷

我有以下吊舱清单

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路径。

这只是出于实验目的,我正在尝试学习在容器中的各个容器之间共享文件系统/事物的方法。

2 个答案:

答案 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"]
相关问题