Прежде всего, я хотел бы подчеркнуть, что нет ничего конкретного от c до Скаффолда . Это скорее связано с самой природой kubernetes Pod
, который не предназначен для запуска до завершения, а скорее продолжает работать (по крайней мере, с настройками по умолчанию).
Вы можете легко проверить это, запустив Pod
из этого примера в нескольких различных вариантах:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
Попробуйте сократить время сна до некоторого более короткого значения, и вы заметите, что оно также постоянно меняется между Completed
и CrashLoopBackOff
штатов. Это также произойдет, когда вы удалите команду, поддерживающую работу контейнера.
Если вы выполните:
kubectl get pod myapp-pod -o yaml
, вы можете заметить, что в Pod
определено restartPolicy
спецификация и если вы не установите его явно в другое значение, по умолчанию оно установлено на Always
. Здесь у вас есть причина, по которой ваши Completed
Pods
постоянно перезапускаются.
Установка его на Never
должна дать вам результат, которого вы хотите достичь. :
spec:
restartPolicy: Never
containers:
- name: myapp-container
image: busybox
...
Однако имейте в виду, что вы обычно не будете использовать голый Pods
для запуска своей рабочей нагрузки в kubernetes . Вы скорее будете использовать контроллеры, такие как Deployment
, которые управляют ими. Пока Deployment
используется, чтобы гарантировать, что определенный набор Pods
запущен и работает, для запуска чего-либо до завершения у вас есть kubernetes другой контроллер с именем Работа .