假设我们有一个简单的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问题是,这个图像/容器依赖于另一个映像/容器--它需要从另一个映像中cp数据,或者使用一些共享卷。
我如何告诉kubernetes下载另一个映像,将其作为容器运行,然后将数据从它复制到上述文件中声明的容器中?
看起来,这篇文章解释了如何。
但还不完全清楚它是如何工作的。似乎您创建了一些共享卷,使用共享卷启动了两个容器?
因此,根据这个链接,我将这个添加到我的deployment.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_data安装为共享卷将覆盖可能已经存在的内容。
因此,我假设我需要做的是在其他位置挂载它,然后为源数据容器设置入口点:
ENTRYPOINT ['cp', '-r', '/nltk_data_source', '/nltk_data']因此,一旦容器启动,它将写入共享卷。
,所以我有两个问题:
/xyz复制到/shared_volume_mount_location (如果没有必要的话)。发布于 2019-07-03 04:54:42
在另一个容器开始使用kubernetes之前,如何运行一个容器并完成一个任务?
使用initContainers -更新您的deployment.yml,假设example.com/nltk_data:latest是您的数据映像
如何在不覆盖共享卷的情况下将其写入共享卷?
由于您知道您的映像中有什么内容,您需要选择一个适当的挂载路径。我会用/mnt/nltk_data
使用init容器更新的deployment.yml
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: 80https://stackoverflow.com/questions/56860922
复制相似问题