Kubernetes - ждите, пока другой модуль будет готов - PullRequest
0 голосов
/ 28 июня 2018

У меня есть два приложения - app1 и app2 , где app1 - это config server, который содержит конфиги для app2 . Я определил конечную точку /readiness в app1 , и мне нужно подождать, пока она не вернет статус OK для запуска модулей app2 .

Крайне важно, чтобы развертывание app2 ожидало, пока kubernetes не получит Http Status OK от / готовность конечной точки в app1 , поскольку это сервер конфигурации и имеет решающее значение конфиги для app2.

Можно ли сделать такую ​​зависимость развертывания?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Да, возможно использование Инициативных контейнеров (также см. Этот пост в блоге для получения дополнительной информации о времени повторения), но лучше, более родной для Kubernetes паттерн - использовать повторы и тайм-ауты. вместо того, чтобы жестко кодировать зависимости таким образом.

0 голосов
/ 08 октября 2018

Вам нужно использовать initContainers. Ниже приведен пример того, как вы можете сделать в вашем YAML файле

initContainers:
- name: wait-for-other-pod
  image: docker.some.image
  args:
  - /bin/sh
  - -c
  - >
    set -x;
    while [ $(curl -sw '%{http_code}' "http://www.google.com" -o /dev/null) -ne 200]; do
      sleep 15;
    done

Будьте осторожны с YAML пробелами. Я использовал curl, вы можете использовать любую другую команду UNIX, чтобы проверить, готов ли другой модуль, например, ping, если вы знаете имя хоста.

Укажите на примечание: вам необходимо на основе ваших бизнес-требований решить, хотите ли вы ждать в initcontainer или containersargs), следующим образом:

containers:
- name: <container_name>
  image: "<image_name>"
  imagePullPolicy: Always
  args:
  - /bin/sh
  - -c
  - >
    <write your wait code here>
0 голосов
/ 28 июня 2018

в настоящее время kubernetes не поддерживает эту функцию "из коробки". И я не думаю, что это должно (в идеале). Вот мои мысли на этот счет:

  1. что если kubernetes попытается запланировать оба одновременно? а. Сначала появляется app1, не о чем беспокоиться. б. Сначала появляется app2 и не находит app1, а затем его модуль перезапускается. Между тем, приложение app1 появляется, а потом не о чем беспокоиться.

  2. Вы можете попытаться добиться поведения зависимости, используя ловушку 'lifecycle' под контейнерами. Там вы можете выполнить команду / скрипт, который может блокировать контейнер, пока не появится app1. Они объяснены на https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/

  3. На базе kubernetes построены аддоны, которые пытаются достичь того же. Вы можете найти их на github.

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