Каковы некоторые рекомендации по развертыванию нескольких контейнеров со связанными переменными среды?

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

Справочная информация: Первоначально я использовал скрипт bash, который передавал инкрементную команду env var командам запуска docker, но теперь я хотел бы получить лучший способ управлять / контролировать все контейнеры. У меня был только опыт использования Kubernetes для сервисов приложений, но кажется, что это может быть и лучший способ организовать мою задачу с несколькими контейнерами.

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

Я открыт для предложений, я знаю, что другие инструменты, такие как Terraform, могут быть полезны и для такого рода программной инфраструктуры.

2 ответа

Как насчет использования параллельной обработки с использованием рабочей очереди для передачи различных переменных среды в ваши рабочие модули k8s с помощью.spec.parallelism. Хотя наличие отдельной службы для рабочей очереди может быть немного слишком много, в зависимости от того, что вы пытаетесь сделать.

Другой идеей может быть использование силы шаблонов шлема для создания файла манифеста k8s. Я создаю образец диаграммы руля, чтобы дать представление о шаблонной параллельной обработке. Смотрите https://github.com/jayrajput/helm-parallel-jobs. После того, как вы клонировали репозиторий git, вы можете установить график рулевого управления для параллельной обработки следующим образом. Шаблон для работы такой же, как и в документации k8s. Как видно из выходных данных ниже, предоставляются три разные переменные среды - яблоко, банан, вишня, которые создают 3 разных модуля с передаваемыми им переменными среды.

    [root@jr]# helm install --set envs='{apple,banana,cherry}'  --name jobs ./helm-parallel-jobs/example/parallel-jobs
    NAME:   jobs
    LAST DEPLOYED: Sun Aug 26 16:29:23 2018
    NAMESPACE: default
    STATUS: DEPLOYED

    RESOURCES:
    ==> v1/Job
    NAME                 DESIRED  SUCCESSFUL  AGE
    process-item-apple   1        0           0s
    process-item-banana  1        0           0s
    process-item-cherry  1        0           0s

    ==> v1/Pod(related)
    NAME                       READY  STATUS             RESTARTS  AGE
    process-item-apple-dr6st   0/1    ContainerCreating  0         0s
    process-item-banana-d2wwq  0/1    ContainerCreating  0         0s
    process-item-cherry-wvlxz  0/1    ContainerCreating  0         0s

Насколько я понимаю, вы хотели бы сделать что-то вроде https://kubernetes.io/docs/tasks/job/parallel-processing-expansion/ где задания создаются из шаблона, по одному для каждого элемента данных в списке. Но вы не хотите, чтобы это было написано в оболочке.

Я полагаю, что helm можно использовать для замены Job, и у него есть функция range, поэтому можно настроить диаграмму для создания заданий для каждой записи в разделе values.yaml. Так что он может занимать место, похожее на то, что вы предложили для terraform. Ansible также может быть вариантом.

Однако направление этого вопроса, по-видимому, направлено на планирование партии. Мне интересно, будут ли ваши рабочие места развиваться, чтобы в конечном итоге возникли зависимости между ними и т. Д. Если это так, Хелм и Кубернетес: существует ли барьерный эквивалент для рабочих мест? и https://www.quora.com/Is-Kubernetes-suited-for-long-running-batch-jobs помогают здесь. В настоящее время в Kubernetes есть средства для запуска пакетных заданий и инструментарий, позволяющий запускать или строить систему пакетного планирования, но сама она не содержит встроенной системы пакетного планирования. Таким образом, люди в настоящее время используют различные подходы для удовлетворения своих потребностей.

Другие вопросы по тегам