Как управлять обновлениями программного обеспечения на docker-compose с одной машиной на пользовательскую архитектуру?

#kubernetes #docker-compose #ansible #devops #docker-watchtower

#kubernetes #docker-compose #ansible #devops #docker-сторожевая башня

Вопрос:

Мы развертываем серверную часть Java и приложение React UI с помощью docker-compose. Наши контейнеры Docker работают под управлением Java, Caddy и Postgres.

Что необычно в этой архитектуре, так это то, что мы не запускаем приложение как кластер. Каждый пользователь получает свой собственный сервер со своим поддоменом. Все работает хорошо, но нам нужна стратегия управления / обновления машин по мере роста числа пользователей.

Мы можем согласиться на некоторое время простоя посреди ночи, поэтому нам не нужна высокая доступность.

Мы просто не уверены, какой лучший способ обновить программное обеспечение на всех машинах. И мы довольно новички в Docker и не имеем опыта работы с Kubernetes или Ansible, Chef, Puppet и т. Д. Но мы быстро разбираемся.

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

Итак, вопрос в том, когда мы вносим изменения в код и хотим развернуть обновленный Java jar или приложение React, каков наилучший способ автоматизировать их?

Некоторые вещи, которые мы рассмотрели:

  • Docker Hub (опасения по поводу ограничения скорости)
  • Развертывание нашего собственного репозитория Docker
  • Kubernetes
  • Ansible
  • https://containrrr.dev/watchtower/

Другие вещи, которые нам, вероятно, понадобятся, включают действия GitHub для создания и обновления образов Docker.

Мы открыты для идей, которые здесь не перечислены, потому что мы многого не знаем об управлении многими машинами, на которых работает docker-compose. Поэтому, пожалуйста, не стесняйтесь предлагать предложения. Большое спасибо!

Комментарии:

1. Вы видели: приятель. работает / руководства / как оптимизировать рабочий процесс kubernetes ?

2. Это выглядит интересно, @Malgorzata. Большое спасибо за совет!

3. Я опубликовал это как ответ с дополнительной информацией, пожалуйста, посмотрите, если это полезно, пожалуйста, поддержите / примите мой ответ.

Ответ №1:

В вашем случае я советую вам использовать комбинацию Kubernetes с CD tools. Один из них — Buddy. Я думаю, что это лучший способ делать такие обновления автоматически. Конечно, вы можете использовать только Kubernetes, но с помощью Buddy или других инструментов CD вы сделаете это быстрее и проще. В моем ответе я описываю Buddy, но есть много популярных инструментов CD для автоматизации рабочих процессов в Kubernetes, таких как, например: GitLab или CodeFresh.io — вы должны выбрать, какой из них на самом деле лучше для вас. Взгляните: CD-automation-tools-Kubernetes.

С Buddy вы можете избежать большинства этих шагов при автоматизации обновлений — (выполнение kubectl apply, kubectl set image команд), выполнив простое нажатие на Git.

Каждый раз, когда вы обновляете код приложения или конфигурацию Kubernetes, у вас есть две возможности обновить свой кластер: kubectl apply или kubectl set image .

Такой рабочий процесс чаще всего выглядит так:

1. Отредактируйте код или конфигурацию приложения.YML-файл

2. Внесите изменения в свой репозиторий Git

3. Создайте новый образ Docker

4. Нажмите на изображение Docker

5. Войдите в свой кластер K8s

6. Выполните kubectl apply kubectl set image команды или, чтобы применить изменения к кластеру K8s

Buddy — это инструмент CD, который вы можете использовать для автоматизации всех рабочих процессов выпуска K8s, таких как:

  • управление обновлениями Dockerfile
  • создание образов Docker и отправка их в реестр Docker
  • применение новых образов в кластере K8s
  • управление изменениями конфигурации развертывания K8s и т. Д.

С Buddy вам нужно будет настроить только один конвейер.

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

Конфигурация конвейера для запуска модулей или заданий Kubernetes

Предположим, что у нас есть приложение в кластере K8s, а его репозиторий содержит:

  • исходный код нашего приложения
  • Файл Dockerfile с инструкциями по созданию образа вашего приложения
  • Сценарии миграции БД
  • Файл Dockerfile с инструкциями по созданию образа, который будет выполнять миграцию во время развертывания (db migration runner)

В этом случае мы можем настроить конвейер, который будет:

1. Создайте приложение и перенесите образы

2. Отправьте их в Docker Hub

3. Запустите миграцию БД, используя ранее созданный образ. Мы можем определить образ, команды и развертывание и использовать файл YAML.

4. Используйте либо Apply K8s Deployment, либо Set K8s Image для обновления образа в вашем приложении K8s.

Вы можете настроить вышеуказанный рабочий процесс должным образом в соответствии со свойствами вашей среды / приложений.

Buddy поддерживает GitLab в качестве поставщика Git. Интеграция этих двух инструментов проста и требует только авторизации GitLab в вашем профиле. Благодаря этой интеграции вы можете создавать конвейеры, которые будут собирать, тестировать и развертывать код вашего приложения на сервере. Но, конечно, если вы используете GitLab, нет необходимости настраивать Buddy в качестве дополнительного инструмента, потому что GitLab также является инструментом CD tools для автоматизации рабочих процессов в Kubernetes. Более подробную информацию вы можете найти здесь: приятель-рабочий процесс-kubernetes.

Читайте также: автоматизация-рабочие процессы-kubernetes.

Ответ №2:

Как оказалось, мы обнаружили, что платный план Docker Hub удовлетворяет все наши потребности. Я ценю отличную информацию от @Malgorzata.