Шлем кубернетес. Можно ли ввести номер реплики для указанной реплики c? - PullRequest
0 голосов
/ 08 апреля 2020

Итак, у меня есть приложение весенней загрузки, которое работает с двумя репликами. Я хочу иметь возможность внедрить, является ли приложение репликой 1 или 2. Я хочу сделать это, поскольку хочу, чтобы мое приложение запускало процесс при запуске, однако я хочу, чтобы только одна из реплик запускала процесс запуска

My test.values.yaml.template

spring-boot:

  application:
      spring:
        datasource:
          url: url
          username: username
          password: password
        profiles:
          active: prod, agent

Ответы [ 3 ]

0 голосов
/ 08 апреля 2020

В общем, если по какой-либо причине вам нужно, чтобы реплики вашего приложения отличались друг от друга, вам следует использовать StatefulSet вместо Deployment. Затем вы можете вставить имя POD в свой контейнер как переменную env и использовать его в своем приложении.

0 голосов
/ 08 апреля 2020

TL; DR:

  • Нет, вы не можете вводить задания непосредственно в ReplicaSet.

Это не руль проблема, это основная концепция Kubernetes:

Из Документация ReplicaSet Документация:

Цель ReplicaSet - поддерживать стабильный набор реплик Стручки работают в любой момент времени. Как таковой, он часто используется, чтобы гарантировать наличие определенного количества идентичных Бобов . Фактически это означает, что вам, возможно, никогда не понадобится манипулировать объектами ReplicaSet: вместо этого используйте Deployment и определите свое приложение в разделе spe c.

  • Цель ReplicaSet - репликация стручки (обычно описанные в развертывании) и гарантирующие, что желаемое количество реплик всегда доступно.

Я хочу иметь возможность внедрить, является ли приложение репликой 1 или 2. Я хочу к этому, поскольку я хочу, чтобы мое приложение запускало процесс при запуске, однако я хочу, чтобы только одна из реплик запускала процесс запуска

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

A Pod представляет единицу развертывания: один экземпляр приложения в Kubernetes, который может состоять из одного контейнера или небольшого числа контейнеров, которые тесно связаны между собой и совместно используют ресурсы.

Для этого вы можете использовать InitContainer :

Инициализировать контейнеры в точности как обычные контейнеры, за исключением:

  • Инициативные контейнеры всегда выполняются до завершения.
  • Каждый init-контейнер должен успешно завершиться до запуска следующего

Если у вас есть какие-либо вопросы, дайте мне знать в комментариях.

0 голосов
/ 08 апреля 2020

Если у вас есть какой-либо процесс запуска, одним из лучших вариантов является использование init container. Пожалуйста, смотрите более подробную информацию здесь

...