首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用kubernetes将数据从一个容器转到另一个容器

如何使用kubernetes将数据从一个容器转到另一个容器
EN

Stack Overflow用户
提问于 2019-07-02 22:51:35
回答 1查看 188关注 0票数 2

假设我们有一个简单的deployment.yml文件:

代码语言:javascript
复制
apiVersion: apps/v1 
kind: Deployment
metadata:
  namespace: ikg-api-demo
  name: ikg-api-demo
spec:
  selector:
    matchLabels:
      app: ikg-api-demo
  replicas: 3 
  template:
    metadata:
      labels:
        app: ikg-api-demo
    spec:
      containers:
        - name: ikg-api-demo
          imagePullPolicy: Always
          image: example.com/main_api:private_key
          ports:
            - containerPort: 80

问题是,这个图像/容器依赖于另一个映像/容器--它需要从另一个映像中cp数据,或者使用一些共享卷。

我如何告诉kubernetes下载另一个映像,将其作为容器运行,然后将数据从它复制到上述文件中声明的容器中?

看起来,这篇文章解释了如何。

但还不完全清楚它是如何工作的。似乎您创建了一些共享卷,使用共享卷启动了两个容器?

因此,根据这个链接,我将这个添加到我的deployment.yml中:

代码语言:javascript
复制
spec:

  volumes:
    - name: shared-data
      emptyDir: {}

  containers:

    - name: ikg-api-demo
      imagePullPolicy: Always
      volumeMounts:
        - name: shared-data
          mountPath: /nltk_data
      image: example.com/nltk_data:latest

    - name: ikg-api-demo
      imagePullPolicy: Always
      volumeMounts:
        - name: shared-data
          mountPath: /nltk_data
      image: example.com/main_api:private_key
      ports:
        - containerPort: 80

我的主要犹豫是,将/nltk_data安装为共享卷将覆盖可能已经存在的内容。

因此,我假设我需要做的是在其他位置挂载它,然后为源数据容器设置入口点:

代码语言:javascript
复制
ENTRYPOINT ['cp', '-r', '/nltk_data_source', '/nltk_data']

因此,一旦容器启动,它将写入共享卷。

,所以我有两个问题:

  1. 在另一个容器开始使用kubernetes之前,如何运行一个容器并完成一个任务?
  2. 如何写入共享卷,而不让共享卷覆盖图像中的内容?换句话说,如果我在图像/容器中有/xyz,我不想将/xyz复制到/shared_volume_mount_location (如果没有必要的话)。
EN

回答 1

Stack Overflow用户

发布于 2019-07-03 04:54:42

在另一个容器开始使用kubernetes之前,如何运行一个容器并完成一个任务?

使用initContainers -更新您的deployment.yml,假设example.com/nltk_data:latest是您的数据映像

如何在不覆盖共享卷的情况下将其写入共享卷?

由于您知道您的映像中有什么内容,您需要选择一个适当的挂载路径。我会用/mnt/nltk_data

使用init容器更新的deployment.yml

代码语言:javascript
复制
spec:
  volumes:
    - name: shared-data
      emptyDir: {}
  initContainers:
    - name: init-ikg-api-demo
      imagePullPolicy: Always
      # You can use command, if you don't want to change the ENTRYPOINT
      command: ['sh', '-c', 'cp -r /nltk_data_source /mnt/nltk_data']
      volumeMounts:
        - name: shared-data
          mountPath: /mnt/nltk_data
      image: example.com/nltk_data:latest
  containers:
    - name: ikg-api-demo
      imagePullPolicy: Always
      volumeMounts:
        - name: shared-data
          mountPath: /nltk_data
      image: example.com/main_api:private_key
      ports:
        - containerPort: 80
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56860922

复制
相关文章

相似问题

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