Контейнеры с коляской в Kubernetes Работа?
Мы используем KubernetesJob
Здесь я расскажу о большом количестве пакетных вычислений, и я бы хотел снабдить каждую работу дополнительным мониторингом для обновления централизованной системы слежения за ходом выполнения задания.
Единственная проблема в том, что я не могу понять, какова семантика (или должна быть) нескольких контейнеров в задании.
Я в любом случае дал ему выстрел (сalpine
коляска, которая печатала «привет» каждые 1 секунду) и после того, как мое основное задание выполнено,Job
с считаютсяSuccessful
иkubectl get pods
в Kubernetes 1.2.0 показывает:
NAME READY STATUS RESTARTS AGE
job-69541b2b2c0189ba82529830fe6064bd-ddt2b 1/2 Completed 0 4m
job-c53e78aee371403fe5d479ef69485a3d-4qtli 1/2 Completed 0 4m
job-df9a48b2fc89c75d50b298a43ca2c8d3-9r0te 1/2 Completed 0 4m
job-e98fb7df5e78fc3ccd5add85f8825471-eghtw 1/2 Completed 0 4m
И если я опишу один из этих стручков
State: Terminated
Reason: Completed
Exit Code: 0
Started: Thu, 24 Mar 2016 11:59:19 -0700
Finished: Thu, 24 Mar 2016 11:59:21 -0700
затемGET
В зависимости от вида работы отображается информация для каждого контейнера:
status:
conditions:
- lastProbeTime: null
lastTransitionTime: 2016-03-24T18:59:29Z
message: 'containers with unready status: [pod-template]'
reason: ContainersNotReady
status: "False"
type: Ready
containerStatuses:
- containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937
image: luigi-reduce:0.2
imageID: docker://sha256:5a5e15390ef8e89a450dac7f85a9821fb86a33b1b7daeab9f116be252424db70
lastState: {}
name: pod-template
ready: false
restartCount: 0
state:
terminated:
containerID: docker://333709ca66462b0e41f42f297fa36261aa81fc099741e425b7192fa7ef733937
exitCode: 0
finishedAt: 2016-03-24T18:59:30Z
reason: Completed
startedAt: 2016-03-24T18:59:29Z
- containerID: docker://3d2b51436e435e0b887af92c420d175fafbeb8441753e378eb77d009a38b7e1e
image: alpine
imageID: docker://sha256:70c557e50ed630deed07cbb0dc4d28aa0f2a485cf7af124cc48f06bce83f784b
lastState: {}
name: sidecar
ready: true
restartCount: 0
state:
running:
startedAt: 2016-03-24T18:59:31Z
hostIP: 10.2.113.74
phase: Running
Таким образом, похоже, что моей коляске нужно будет наблюдать за основным процессом (как?) И грациозно выходить, как только он обнаружит, что он один в капсуле? Если это правильно, то существуют ли передовые практики / шаблоны для этого (должен ли выход из коляски с кодом возврата основного контейнера? Но как это получить?)?
** Обновление ** После дальнейших экспериментов я также обнаружил следующее: если в модуле есть два контейнера, то он не считается успешным, пока все контейнеры в модуле не вернутся с кодом выхода 0.
Кроме того, еслиrestartPolicy: OnFailure
устанавливается в спецификации модуля, тогда любой контейнер в модуле, заканчивающийся ненулевым кодом выхода, будет перезапущен в том же модуле (это может быть полезно для коляски мониторинга для подсчета количества повторных попыток и удаления задания после определенного число (для обхода нет максимальных попыток, доступных в настоящее время в рабочих местах Kubernetes)).