首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在吊舱中的容器之间共享非持久的体积

在吊舱中的容器之间共享非持久的体积
EN

Stack Overflow用户
提问于 2020-12-27 22:39:07
回答 1查看 1.3K关注 0票数 1

我试图将两个nodejs应用程序放在同一个吊舱中,因为它们通常应该位于同一台机器上,不幸的是,它们以这样的方式严重耦合在一起,以至于它们都在寻找另一个的文件夹(pos/app.js需要/pos-service,pos-service/app.js需要/pos)。

最后,文件夹应该包含:

代码语言:javascript
复制
/pos 
/pos-service

它们的卷不需要持久化,所以我尝试与emptyDir共享它们的卷,如下所示:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pos-deployment
  labels:
    app: pos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pos
  template:
    metadata:
      labels:
        app: pos
    spec:
      volumes:
      - name: shared-data
        emptyDir: {}
      containers:
      - name: pos-service
        image: pos-service:0.0.1
        volumeMounts:
        - name: shared-data
          mountPath: /pos-service
      - name: pos
        image: pos:0.0.3
        volumeMounts:
        - name: shared-data
          mountPath: /pos

然而,当吊舱发射时,我把它们放入每个容器中,它们似乎仍然是孤立的,彼此的文件夹也看不见。

我会提供任何帮助的,谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-30 19:14:39

这是一个Community的答案,所以请随意编辑它,并添加任何您认为重要的附加细节。

既然这个问题已经解决了,或者说已经被澄清了,因为实际上这里没有什么要解决的,所以让我们发布一个Community 答案,因为它部分基于几个不同用户的评论。

正如哑光戴维·麦子已经提到的,它可以正常工作,在您的示例中,没有任何内容可以复制到emptyDir卷中:

使用您所展示的YAML,任何东西都不会复制到emptyDir卷中,除非映像的启动知道这样做。- David Maze 12月28日‘20日12时45分

正如它的名字所暗示的那样,emptyDir完全是空的,所以您的任务是用所需的数据预填充它。可以通过将init容器临时挂载到不同的挂载点(例如/mnt/my-epmty-dir ),并复制容器(例如,/pos/pos-service )中已经存在的特定目录的内容(如示例中的/pos/pos-service),然后再将其挂载到所需的位置来完成。看一看这个例子,它是我以前的一个答案,因为它可以用同样的方式完成。您的Deployment可能如下所示:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pos-deployment
  labels:
    app: pos
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pos
  template:
    metadata:
      labels:
        app: pos
    spec:
      volumes:
      - name: shared-data
        emptyDir: {}
      initContainers:
      - name: pre-populate-empty-dir-1
        image: pos-service:0.0.1
        command: ['sh', '-c', 'cp -a /pos-service/* /mnt/empty-dir-content/']
        volumeMounts:
         - name: shared-data
           mountPath: "/mnt/empty-dir-content/"
      - name: pre-populate-empty-dir-2
        image: pos:0.0.3
        command: ['sh', '-c', 'cp -a /pos/* /mnt/empty-dir-content/']
        volumeMounts:
         - name: shared-data
           mountPath: "/mnt/empty-dir-content/"
      containers:
      - name: pos-service
        image: pos-service:0.0.1
        volumeMounts:
        - name: shared-data
          mountPath: /pos-service
      - name: pos
        image: pos:0.0.3
        volumeMounts:
        - name: shared-data
          mountPath: /pos

值得一提的是,这里没有什么奇怪的,因为mount、Linux、或其他基于nix的操作系统上的工作方式非常精确。

如果您的主磁盘上有/var/log/your-app,并填充了日志,然后挂载一个定义为挂载点/var/log/your-app的新的、空的磁盘,那么您将不会看到任何内容。它不会从主磁盘上的原始位置被删除,它将变得不可用,因为在这个位置现在你已经挂载了完全不同的卷(碰巧是空的或者可能有完全不同的内容)。当您再次卸载并访问您的/var/log/your-app时,您将看到它的原始内容。我希望一切都清楚。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65471145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档