От локальной Docker установки до производства Kubernetes - PullRequest
0 голосов
/ 05 января 2020

У меня есть локальная Docker установка, состоящая из четырех контейнеров: flask веб-приложение, MySQL, Redis и RQ worker.

Настройка, по сути, такая же, как и у Мигеля Гринберга Flask Мега-учебник. Вот ссылки на его учебник и его код .

Единственное отличие в моем случае состоит в том, что я заменил его функцию экспорта сообщений в блоге, которая работает на rq-worker, с другим, который невероятно интенсивен в вычислительном отношении и долго работает (30 минут).

Каков наилучший способ развертывания этого приложения для производства?

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

Я изучал примеры Kubernetes, но мне трудно переводить их к моей настройке и выяснить, как развернуть в GCP. Я открыт для других вариантов развертывания.

Вот docker команды запуска из учебника:

docker run --name redis -d -p 6379:6379 redis:3-alpine

docker run --name mysql -d -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
    -e MYSQL_DATABASE=flaskapp -e MYSQL_USER=flaskapp \
    -e MYSQL_PASSWORD=mysqlpassword \
    mysql/mysql-server:5.7
docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
    -e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
    -e MAIL_USERNAME=example@gmail.com -e MAIL_PASSWORD=mysqlpassword \
    --link mysql:dbserver --link redis:redis-server \
    -e DATABASE_URL=mysql+pymysql://flaskapp:mypassword@dbserver/flaskapp \
    -e REDIS_URL=redis://redis-server:6379/0 \
    --entrypoint venv/bin/rq \
    flaskapp:latest worker -u redis://redis-server:6379/0 dyson-tasks
docker run --name flaskapp -d -p 8000:5000 --rm -e SECRET_KEY=my_secret_key \
    -e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
    -e MAIL_USERNAME=example@gmail.com -e MAIL_PASSWORD=mypassword \
    --link mysql:dbserver --link redis:redis-server  \
    -e DATABASE_URL=mysql+pymysql://flaskapp:mysqlpassword@dbserver/flaskapp \
    -e REDIS_URL=redis://redis-server:6379/0 \
    flaskapp:latest 

1 Ответ

1 голос
/ 05 января 2020

Поскольку вы помечаете вопрос с помощью Kubernetes и Google Cloud Platform, я ожидаю, что это именно то направление, которое вы хотите.

При развертывании на облачной платформе рассмотрите возможность использования облачного решения для хранения / базы данных. Одноузловой MySQL не является готовым к использованию облачным хранилищем. Попробуйте вместо этого использовать, например, Google Cloud SQL.

Ваше "flask веб-приложение" может быть идеально развернуто как Развертывание в Google Kubernetes Engine - но для этого необходимо, чтобы ваше приложение было без состояния и следовало бы принципам приложения из двенадцати факторов .

Ваш Redis может также быть развернут в Kubernetes, но вам нужно подумать о том, насколько важны ваши требования к доступности. Если вы не хотите думать об этом, вы также можете использовать управляемый Google Redis, например, Google memorystore - полностью управляемый сервис хранения данных в памяти для Redis.

Если вы Если вы решите использовать полностью управляемый кэш, вы можете развернуть ваше «flask веб-приложение» в качестве контейнера, используя Google Cloud Run - это более управляемое решение, чем полный кластер Kubernetes, но также более ограниченное , Но хорошая мысль здесь заключается в том, что вы платите только за запросов .

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