Скажем, у нас есть простой файл deploy.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: 913xxx371.dkr.ecr.us-west-2.amazonaws.com/main_api:c56cefbd0c81142558cf814cba7d7cd75d7cb6a7
ports:
- containerPort: 80
проблема в том, что это изображение / контейнер зависит от другого изображения / контейнера - ему нужно скопировать данные из другого изображения или использовать какой-то общий том.
Как я могу сказать kubernetes загрузить другое изображение, запустить его как контейнер, а затем скопировать данные из него в контейнер, объявленный в вышеуказанном файле?
Похоже, эта статья объясняет, как.
но не совсем понятно, как это работает. Похоже, вы создали какой-то общий том, запустили два контейнера, используя этот общий том?
поэтому я по этой ссылке добавил это в мой deploy.yml:
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: ikg-api-demo
imagePullPolicy: Always
volumeMounts:
- name: shared-data
mountPath: /nltk_data
image: 913617820371.dkr.ecr.us-west-2.amazonaws.com/nltk_data:latest
- name: ikg-api-demo
imagePullPolicy: Always
volumeMounts:
- name: shared-data
mountPath: /nltk_data
image: 913xxx371.dkr.ecr.us-west-2.amazonaws.com/main_api:c56cefbd0c81142558cf814cba7d7cd75d7cb6a7
ports:
- containerPort: 80
Мое основное сомнение заключается в том, что монтирование / nltk_data в качестве общего тома перезапишет то, что уже может быть там.
Итак, я предполагаю, что мне нужно смонтировать его в другом месте, а затем сделать ENTRYPOINT для контейнера исходных данных:
ENTRYPOINT ['cp', '-r', '/nltk_data_source', '/nltk_data']
чтобы записать его на общий том после запуска контейнера.
Итак, у меня два вопроса:
Как запустить один контейнер и завершить работу, прежде чем другой контейнер начнет использовать kubernetes?
Как записать на общий том без перезаписи того общего тома, что есть на вашем изображении? Другими словами, если у меня есть / xyz в изображении / контейнере, я не хочу копировать /xyz
в /shared_volume_mount_location
, если мне не нужно.