Какова лучшая практика для предоставления пользовательских инструментов командной строки для вашего контейнера приложения? - PullRequest
0 голосов
/ 26 октября 2018

мы являемся поставщиком программного обеспечения, который в настоящее время исследует Docker в целом и Kubernetes в частности, чтобы предоставить клиентам возможность установить наш программный стек в их среде. Наше программное обеспечение поставляется с целым набором инструментов командной строки, которые в основном используются для целей администрирования. В то время как большинство задач администратора могут быть выполнены через пользовательский интерфейс, другие могут быть выполнены только с помощью этих инструментов. Мы подумали о том, как предоставить эти инструменты клиентам, использующим наше программное обеспечение на Docker. Первой мыслью было просто сделать большой архив доступным для них, который они могли бы загрузить и запустить на своей машине администратора. Но мы быстро пришли к идее предоставить вместо этого контейнер «инструменты администратора», который содержит все эти инструменты. В отличие от других наших контейнеров, этот предназначен не для запуска в качестве сервера, а для запуска из сценариев или в интерактивном режиме. Даже несмотря на то, что соответствующие командные строки docker или kubectl становятся немного длиннее, это в основном работает, и я думаю, что подход имеет некоторые преимущества, так как это «внутриполосный» способ также публиковать наши инструменты командной строки. Однако некоторые задачи администрирования требуют, чтобы вы передавали файлы соответствующему инструменту командной строки, или инструменты генерируют файлы (например, резервные копии). Таким образом, вам нужен способ получить эти файлы в ваш контейнер или из него. В среде Docker довольно просто использовать «docker run» и монтировать каталог тома или хоста в ваш контейнер, содержащий файлы. Однако в Kubernetes это не так просто (см. Создание модуля kubernetes с томом, используя kubectl run , чтобы узнать, как это сделать с помощью "kubectl run" ... Yikes!). Запуск контейнера инструментов администратора в обычном модуле (созданном с помощью файла YAML) с монтированием тома и присоединение к нему на самом деле проще.

В заключение я хотел бы высказать соображения по поводу заглавного вопроса: каков «лучший» способ сделать инструменты командной строки для администрирования контейнерных приложений доступными для их пользователей?

  • Отправьте их в виде отдельного архива и разрешите пользователям использовать их так же, как и в мире, предшествующем контейнеру?
  • Отправлять их в контейнерах, которые предназначены для интерактивного использования (как описано выше)?
  • есть еще идеи?

С уважением PJ

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Вы хотите Операторы Kubernetes .

Люди не хотят использовать ваш CLI, они только используют ваш CLI, чтобы "выполнить работу".Если вы можете поместить свои действия CLI в оператора Kubernetes, вы получите стандартный API, который может использовать любой другой инструмент.

Например, предположим, что наше программное обеспечение похоже на базу данных.Ваш оператор может иметь запись, представляющую каждую базу данных, которая будет иметь поля для «как часто делать резервные копии» и «сколько реплик».Любой инструмент (или даже kubctl CLI) может установить эти поля, и ваш оператор делает всю грязную работу, чтобы это произошло.Ваши клиенты устанавливают одного оператора, и им не нужно управлять временными контейнерами, которые «выполняют работу», и они не должны понимать ваш CLI.

0 голосов
/ 26 октября 2018

Мне нравятся инструменты командной строки так же, как следующий инженер-программист; и я считаю, что Docker не должен быть частью вашего решения .

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

docker images | grep dmaze | awk '{ print $1 ":" $2 }' | xargs docker rmi

, но это становится намного труднее, если я заменю docker на расширенный вызов docker run -e ... -v ... -v ... vendor/imagename command.

Точно так же стоит просмотреть Переполнение стека для таких вопросов:

Я упаковал свой инструмент в Docker. Я пытаюсь запустить это. Какая опция docker run -v мне нужна, чтобы предоставить ей доступ к моим файлам? Он не запускается как root; какие настройки разрешений мне нужны? Если у меня есть один файл, который ссылается на другой, как мне сделать имена файлов согласованными в разных средах? Я забыл docker run -v, мой выходной файл полностью исчез?

Если ваши инструменты упакованы как образ Docker, вы переносите все эти сложности на пользователя; мне просто проще что-то уронить в $PATH.

Преимущества для вас, как поставщика инструмента, кажутся довольно минимальными. Образ Docker - это отдельный артефакт, но также и файл tar. Вы, вероятно, можете положиться на общедоступный набор базовых библиотек C и языков исполнения; например, вы можете многое сделать с помощью стандартной библиотеки Python, и почти в каждой установке Linux это будет доступно.

Kubernetes определенно не применим здесь. Это наиболее полезно для запуска распределенных приложений в кластерных средах. У некоторых очень преданных разработчиков может быть minikube, но это не повседневная задача, и получение интерактивной оболочки в модуле Kubernetes является еще большим исключением, чем получение в контейнере Docker (или должно быть). .

0 голосов
/ 26 октября 2018

Следующие опции должны быть доступны пользователям:

  • Инструменты должны быть доступны в виде изображений докеров с тегами
  • Пользователи должны иметь право использовать образы Docker либо с Docker Run, либо с Kubernetes в зависимости от того, что у них работает (оставьте это для пользователей)
  • Инструменты также должны быть доступны в виде tar-архивов, как в мире до докеров, потому что не все пользователи хотели бы использовать докер
  • Инструменты также могут быть предоставлены / размещены в облаке, и пользователи могут запускать их оттуда. см https://cmd.io/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...