如何使用kubernetes将数据从一个容器复制到另一个容器
假设我们有一个简单的deployment.yml文件:如何使用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:
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']
这样,一旦容器启动,就会将其写入共享卷
所以我有两个问题:
/xyz
复制到/shared\u volume\u mount\u location
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