Быстрое изменение приложения Python в модуле K8S для отладки. - PullRequest
1 голос
/ 26 апреля 2019

Фон

У меня есть большая служба Python, которая работает на настольном ПК, и мне нужно, чтобы она работала как часть развертывания K8S. Я ожидаю, что мне придется внести несколько небольших изменений, чтобы служба работала в развертывании / модуле, прежде чем она заработает.


Проблема

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

  • Изменить мой код Python.
  • Перестройте контейнер Docker (который включает в себя мой сервис Python).
  • scp контейнер Docker на сервер реестра Docker.
  • docker load изображение, обновите теги и отправьте его в фоновую базу данных реестра.
  • Вручную убейте работающие в данный момент модули, чтобы при развертывании все модули были перезапущены с новым образом Docker.

Это требует много времени каждый раз, когда мне нужно отладить небольшую проблему. В идеале я предпочитаю иметь возможность просто изменить копию моего кода Python, уже запущенного на модуле, но я не могу его убить (поскольку служба Python является приложением по умолчанию, которое запускается с PID=1), и K8S не поддерживает перезапуск модуля (насколько мне известно). С другой стороны, если я убиваю / запускаю другой модуль, он не будет иметь моих локальных изменений по сравнению с модулем, над которым я ранее работал (который, конечно, разработан, но не помогает в моих усилиях по отладке).


Вопрос

Есть ли лучший / более быстрый способ быстрого развертывания (экспериментального / отладочного) изменений в тестируемом контейнере без необходимости тратить несколько минут на воссоздание образов контейнеров, повторное развертывание / тегирование / отправка их и т. Д.? Если бы я мог найти и смонтировать (прочитать-написать) образ Docker, это могло бы помочь, так как я мог бы редактировать данные внутри него напрямую (то есть, новые изменения в Python) и просто убивать модули, чтобы их воссоздание воссоздали.


Ответы [ 2 ]

4 голосов
/ 26 апреля 2019

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

Для первого - полтора миллионаинструменты, но Skaffold, вероятно, является наиболее распространенным.

Во-вторых, вы делаете что-то вроде ( eval $(minikube docker-env) && docker build -t myimagename . ), которое создает изображение непосредственно в среде док-станции Minikube, поэтому вы полностью пропускаете шаги 3 и 4 в своем списке.Вы можете комбинировать это с инструментом, который обнаруживает изменение изображения и либо перезапускает ваши модули, либо обновляет развертывание (которое перезапускает модули).

Кроме того, FWIW с использованием scp и docker load обычно не является стандартнымэто будет объединено в docker push.

1 голос
/ 27 апреля 2019

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

Для моего опыта я создам образ Docker, включающий только зависимости пакета Python, и использую volume для сопоставления dir исходного кода спуть к контейнеру, поэтому вам не нужно перестраивать образ, если не добавлены или удалены никакие зависимости.

Пример

У меня мало опыта с k8s, но я считаю, что это должно быть больше илименьше, чем docker run.

Dockerfile

FROM python:3.7-stretch

COPY ./python/requirements.txt /tmp/requirements.txt

RUN pip install --no-cache-dir -r /tmp/requirements.txt

ENTRYPOINT ["bash"]

Контейнер Docker

scp разверните ваш код на сервере и сопоставьте исходный путь вашего хоста сПуть к исходному контейнеру, например:

docker run -it -d -v /path/to/your/python/source:/path/to/your/server/source --name python-service your-image-name

С отображением томов ваш контейнер больше не зависит от исходного кода, вы можете легко изменить исходный код, не перестраивая изображение.

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