Как ждать, пока другой модуль не начнет работать с использованием контейнеров init? - PullRequest
1 голос
/ 17 апреля 2020
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice; do echo waiting for myservice; sleep 2; done"]

Я использую nslookup, чтобы дождаться появления другой службы. Однако это не решает мою проблему. Как сервис будет, но соответствующее приложение - модуль, возможно, не готов. В этом случае служебная зависимость не будет обрабатываться.

Как убедиться, что одно приложение app1 запущено перед запуском app2?

1 Ответ

1 голос
/ 17 апреля 2020

У меня были подобные проблемы с docker - составить в прошлом. Есть два подхода, которые я использовал для их решения. Оба они предполагают, что службы предоставят порт для прослушивания.

  1. Простой и легкий : дождитесь, пока указанный c порт приложения не будет прослушивать команда тайм-аута. Это очень похоже на то, что вы уже делаете. Таким образом, ваш command будет выглядеть примерно так:
    initContainers:
    - name: init-myservice
        image: busybox:1.28
        command: ['sh', '-c', "until timeout 2 bash -c \"</dev/tcp/myservice/${MY_SERVICE_TCP_PORT}\"; do echo waiting for myservice; sleep 2; done"]
    
  2. Универсален, но с дополнительной зависимостью : используйте замечательный инструмент dockerize . Легкий двоичный файл, который будет контролировать зависимости между контейнерами. Он также делает много других вещей, таких как управление журналом из файла журнала или выполнение шаблонов конфигурации. Единственным недостатком является то, что вы вводите новую зависимость в свой контейнер, но, на мой взгляд, это того стоит. В этом случае вы можете выполнять tcp и http проверки работоспособности сервисов и даже вводить заголовки в http (очень полезно для аутентифицированных конечных точек).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...