Запуск контейнера с определенной командой завершается неудачно - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь этот пример из документации Kubernetes, чтобы определить команду для запуска при запуске контейнера.

Я непосредственно скопировал .yaml в данном примере, как показано ниже:

apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]
  restartPolicy: OnFailure

Затем я создал Pod с помощью kubectl apply -f command-demo.yaml

После этого, когда я выполняю kubectl get pods , Pod никогда не запускается:

NAME                                 READY     STATUS             RESTARTS   AGE
command-demo                         0/1       Completed          0          2m

Кроме того, когда я выполняю команду kubectl logs, команда-demo выводит переменные, связанные с окружением. Пример:

command-demo
tcp://10.80.2.3:443

Кажется, что когда я использую команду в файле yaml, мой модуль никогда не запускается, но команда выполняется. Есть у кого-нибудь есть идеи об этой ситуации? Заранее спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

Это именно то поведение, которое описано в примере. Модуль запускается и запускает команду, которая завершается напрямую и завершается. Когда команда выходит, модуль останавливается. Жизненный цикл модуля зависит от процесса с PID 1, который является командой, определенной в yaml или в используемом файле Docker, указанном image.

Из-за определенного restartPolicy: OnFailure модуль не будет перезапущен и получит статус «Завершено». Если вы удалите политику, то по умолчанию будет Всегда, и ваш модуль будет перезапускаться снова и снова, пока вы не удалите модуль вручную.

Вы можете проверить некоторые детали с помощью kubectl descripe pod command-demo.

Проблема в том, что данный пример предназначен только для обучения и не представляет собой реальный пример из жизни. Обычно вы запускаете команды, которые не останавливаются и должны выполняться все время, как веб-сервер. Но они обычно управляются развертыванием. Или вы запускаете команду, которая должна быть выполнена один раз и завершена, но для них используется задание.

Так что просто следуйте другим учебникам из Kubernetes. В разделе Запуск приложений будет приведен пример с веб-сервером nginx, который запускает модуль и продолжает работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...