Образ Docker не может оставаться в живых в конвейере сборки Jenkins Kubernetes
Мы хотим развернуть с помощью ArgoCD из нашего Jenkinsfile (что немного не так, как это должно быть сделано, но достаточно близко), и после некоторых экспериментов хотим попробовать использовать официальный контейнер с CLI, поэтому мы добавили этот фрагмент в наш наш конвейер kubernetes yaml:
- name: argocdcli
image: argoproj/argocli
command:
- argo
args:
- version
tty: true
К сожалению, обычный способ сохранить эти контейнеры живыми - это вызвать cat
в контейнере, которого нет, поэтому он терпит неудачу. На самом деле единственная команда - это команда "argo", которая не может спать бесконечно. (Мы собираемся сообщить об этом в апстриме, чтобы это было исправлено, но пока мы ждем этого...)
Поэтому мой вопрос: есть ли способ указать Kubernetes, что мы знаем, что этот под не может поддерживать себя сам по себе и, следовательно, не разрушить его немедленно?
1 ответ
К сожалению, это невозможно, поскольку, как вы сказали, argo
- единственная команда, доступная на этом изображении.
Это можно подтвердить здесь:
####################################################################################################
# argocli
####################################################################################################
FROM scratch as argocli
COPY --from=argo-build /go/src/github.com/argoproj/argo/dist/argo-linux-amd64 /bin/argo
ENTRYPOINT [ "argo" ]
Как видно из этого вывода, все, что делает этот контейнер, - это запуск argo:
$ kubectl run -i --tty --image argoproj/argocli argoproj1 --restart=Never
argo is the command line interface to Argo
Usage:
argo [flags]
argo [command]
...
При желании вы можете создать собственное изображение на основе этого и включить режим сна, чтобы его можно было сохранить, как в этом примере:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always