2017-02-12 6 views
3

Я создаю контроллер репликации с одним контейнером-init. Однако контейнер инициализации не запускается и состояние контейнера является:kubernetes init container CrashLoopBackOff

NAME      READY  STATUS    RESTARTS AGE 
testcontainer 0/1  CrashLoopBackOff 12   37m 

Я не уверен, что часть не удается точно, и журналы не помогают. Моя версия kubectl сервер 1.4 (отличается от версии клиента), поэтому я использую:

annotations: 
     pod.beta.kubernetes.io/init-containers: 

Вот репликация контроллера YAML файл я использую. Я использую «привет-мир» изображение (вместо Nginx, чтобы сделать это быстрее)

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: testcontainer 
spec: 
    replicas: 1 
    selector: 
    app: nginx 
    template: 
    metadata: 
     labels: 
     app: nginx 
     annotations: 
     pod.beta.kubernetes.io/init-containers: '[ 
      { 
       "name": "install", 
       "image": "hello-world" 
      } 
     ]' 
    spec: 
     containers: 
     - name: nginx 
     image: hello-world 
     dnsPolicy: Default 
     nodeName: x.x.x.x 

журналы из kubectl описывают стручок:

Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "nginx" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=nginx pod=testcontainer()" 

    32m 16s  145  {kubelet x.x.x.x} spec.containers{nginx} Warning BackOff Back-off restarting failed docker container 

когда я проверяю журналы обоих контейнеров (nginx и testcontainer), он показывает результат запуска изображения hello-world, поэтому я думаю, что изображение загружается и запускается успешно. Я не уверен, что сработает после этого (я даже попытался создать один контейнер, используя пример, приведенный на https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container, но все еще не удается)

Спасибо!

ответ

1

Я думаю, что проблема здесь не в контейнере init. Изображение hello-world распечатает текст и сразу же выйдет. Начиная с .spec.restartPolicy настроек по умолчанию Always, он просто перезапускает блок каждый раз.

Сообщение об ошибке может быть немного запутанным, но поскольку устройство предназначено для работы навсегда, вполне разумно отображать ошибку, даже если код выхода 0.

Если вы хотите запустить контейнер только один раз, вы должны использовать job API.


Поскольку вы заинтересованы в качестве примера для инициализации контейнера-, я установил свой пример:

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: testcontainer 
spec: 
    replicas: 1 
    selector: 
    app: nginx 
    template: 
    metadata: 
     labels: 
     app: nginx 
     annotations: 
     pod.beta.kubernetes.io/init-containers: '[ 
      { 
       "name": "install", 
       "image": "hello-world" 
      } 
     ]' 
    spec: 
     containers: 
     - name: nginx 
     image: nginx # <--- this image shouldn't be a single shot application 
     dnsPolicy: Default 
     nodeName: x.x.x.x 
+0

Привет svenwltr Я думал инициализации cotainer (установки) будет работать, и в случае успеха запускается контейнер приложения (nginx). если контейнер init успешно, зачем он перезапускается? (не должна ли политика «всегда» перезапуска применяться только в случае ее отказа?) Ive также попытался использовать этот пример, а контейнер инициализации все еще не выполнен: https://kubernetes.io/docs/tasks/configure-pod-container/configure -pod-initialization/# create-a-pod-that-has-an-init-container Я вижу «PodInitializig», но он никогда не завершается. – greg

+0

Другими словами, как я могу создать контейнер init для контроллера репликации (не задания), работающего с изображением hello-world? – greg

+0

Ваш контейнер инициализации работает нормально, но после контейнера init запускается контейнер с именем 'nginx'. Этот контейнер также использует изображение hello-world. Вы заменяете это изображение. – svenwltr