#kubernetes
Вопрос:
У меня есть yaml
манифест parallelism: 2
, в том числе один initContainers
. Таким initContainers
образом , команда в, выполняется два раза и вызывает проблемы с основной командой. Как я могу заставить его работать только один раз?
Вот важные части yaml
kind: Job
apiVersion: batch/v1
metadata:
name: bankruptcy
spec:
parallelism: 2
template:
metadata:
labels:
app: bankruptcy
spec:
restartPolicy: Never
containers:
- name: bankruptcy
image: "myimage"
workingDir: /mount/
command: ["bash","./sweep.sh"]
resources:
limits:
nvidia.com/gpu: 1
initContainers:
- name: dev-init-sweep
image: 'myimage'
workingDir: /mount/
command: ['/bin/bash']
args:
- '--login'
- '-c'
- 'wandb sweep ./sweep.yaml 2>amp;1 | tee ./wandb/sweep-output.txt; echo `expr "$(cat ./wandb/sweep-output.txt)" : ".*(wandb agent.*)"` > ./sweep.sh;'
Комментарии:
1. Ты не можешь. …
Ответ №1:
initContainer запускается один раз для каждого модуля. Вы не можете запустить initContainer только один раз для заданного количества модулей. Но вы можете реализовать защиту как часть вашего initContainer, которая обнаруживает, что другой уже запущен, и просто возвращается, не выполняя собственную операцию или не дожидаясь выполнения условия.
Вы должны реализовать его самостоятельно, хотя для этого нет поддержки со стороны Kubernetes.
Комментарии:
1. Спасибо @Thomas, у вас есть какая-нибудь ссылка, где я могу прочитать о том, как реализовать такую защиту? Я новичок в кубернетесе.
2. В зависимости от того, как вы могли бы определить, что ваша инициализация уже запущена, например, может работать специальный файл в общей файловой системе. В решении нет ничего конкретного о кубернетесе.
3. Хорошо, значит, я мог бы использовать файл bash в команде init, которая выполняет эту проверку (на основе сгенерированного файла)?
4. Звучит неплохо, верно.
5. скрипт bash, проверяющий, завершается ли конкретный файл (созданный в init), делает трюк!