Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用kubernetes将数据从一个容器复制到另一个容器_Kubernetes_Docker Volume_Amazon Eks_Docker Copy - Fatal编程技术网

如何使用kubernetes将数据从一个容器复制到另一个容器

如何使用kubernetes将数据从一个容器复制到另一个容器,kubernetes,docker-volume,amazon-eks,docker-copy,Kubernetes,Docker Volume,Amazon Eks,Docker Copy,假设我们有一个简单的deployment.yml文件: 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:

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

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
问题在于此映像/容器依赖于另一个映像/容器-它需要从另一个映像复制数据,或者使用一些共享卷

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

它看起来解释了如何

但它的工作原理还不是100%清楚。看起来您创建了一些共享卷,使用该共享卷启动了两个容器

因此,根据该链接,我将此添加到部署中。yml:

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_数据装载为共享卷将覆盖可能已经存在的内容

因此,我假设我需要做的是将其装载到其他位置,然后创建源数据容器的入口点:

ENTRYPOINT ['cp', '-r', '/nltk_data_source', '/nltk_data']
这样,一旦容器启动,就会将其写入共享卷

所以我有两个问题:

  • 如何在另一个容器开始使用kubernetes之前运行一个容器并完成一个作业

  • 如何写入共享卷而不让该共享卷覆盖映像中的内容?换句话说,如果映像/容器中有/xyz,如果不需要,我不想将
    /xyz
    复制到
    /shared\u volume\u mount\u location

  • 如何在另一个容器开始使用kubernetes之前运行一个容器并完成一个作业? 使用initContainers-updated your deployment.yml,假设
    example.com/nltk_data:latest
    是您的数据映像

    如何在不覆盖共享卷的情况下写入共享卷? 正如您知道映像中有什么一样,您需要选择适当的装载路径。我会使用
    /mnt/nltk_数据

    使用init容器更新了deployment.yml
    酷,为什么一个挂载路径是:
    mountPath:/mnt/nltk_data
    ,而另一个是:
    mountPath:/nltk_data
    ?这取决于您的应用程序。安装在任何你想要的地方。如果应用程序查看
    /nltk\u数据
    ,您将在那里挂载。由于您要求不要干扰
    现有数据
    ,我建议使用
    /mnt/
    路径前缀。
    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