В моем предыдущем посте я обсуждал усовершенствование исходного базового плагина Kubernetes до версии, которая была достаточно функциональной. Эта версия была разработана для использования Fabric и работы на существующих машинах (виртуальных или «голых»). В этом посте обсуждаются изменения, необходимые для создания того же гибридного развертывания, что и раньше, но размещенного в OpenStack .
Управляющее резюме
Для тех, кто заинтересован в конечном результате без технических подробностей, продвижение по сравнению с предыдущим постом состоит в переносе плагина для использования в управляемой среде Cloudify и создании проекта OpenStack, который:
- Предоставляет виртуальные машины для хранения кластера Kubernetes и экземпляра MongoDB.
- Устанавливает Kubernetes и MongoDB отдельно.
- Развертывает и настраивает распределенное приложение NodeJS на гибридной платформе: NodeJS и веб-приложение Nodecellar в качестве модуля Kubernetes, а также MongoDB (mongod) и связанную базу данных Nodecellar.
Код есть на github . Видео, описывающее проект оркестровки на высоком уровне, доступно на веб-сайте Cloudify.
Некоторые технические детали
Замена Ткани
Использование плагина Fabric отлично подходит как для быстрой разработки чертежей и плагинов, так и для целей развертывания, не связанных с облаком, без менеджера. Для облака, такого как OpenStack, стандартный управляемый подход более желателен. Весь фактический код задачи фабрики находится в файлах start-master-ubuntu14-tasks.py и start-node-ubuntu14-tasks.py . Усилия по портированию сводятся к замене вызовов Fabric (например, run, sudo, put) вызовами в стандартную библиотеку python «subprocess». Репрезентативный пример такого перевода:
раньше
sudo («set -m; docker -d -H unix: ///var/run/docker-bootstrap.sock -p /var/run/docker-bootstrap.pid —iptables = false —ip-masq = false —bridge = нет —graph = / var / lib / docker-bootstrap 2> /var/log/docker-bootstrap.log 1> / dev / null </ dev / null & «, shell = True) |
просмотреть raw cfy-fabexample.py, размещенный на with в GitHub
После
subprocess.Popen ([ ‘Sudo’, ‘поЬир’, ‘Докер’, ‘- D’, ‘- Н’, ‘UNIX: ///var/run/docker-bootstrap.sock’,’-p’,» /var/run/docker-bootstrap.pid’,’—iptables=false’,’—ip-masq=false’,’—bridge=none’,’—graph=/var/lib/docker- самозагрузки ‘], стандартный вывод = открытый (‘ / DEV / нуль ‘), STDERR = открытый (‘ / TMP / DOCKER-bootstrap.log», ‘W’), стандартный ввод = открыт ( ‘/ DEV / нуль’)) |
просмотр необработанного cfy-subpexample.py, размещенного на ❤ в GitHub
Другим незначительным побочным эффектом замены плагина Fabric является удаление конфигурации Fabric из самого чертежа. Исполнитель плагина также изменяется с central_deployment_agent
на host_agent
.
Получение поздних связанных свойств времени выполнения
Одним из побочных эффектов перехода на OpenStack является то, что IP-адреса больше не определяются статически. Поскольку проект должен настраивать микросервис Kubernetes на IP-адрес экземпляра MongoDB, необходимо использовать некоторые средства для получения этой информации во время выполнения после запуска хоста MongoDB. Характеристическая get_attribute
функция не будет работать в этом случае, поэтому плагин предоставляет пользовательский синтаксис для инъекционного свойств среды выполнения: @{ node, attribute}
. Пример:
config_overrides:
- "['spec']['containers'][0]['env'][0]['value'] = '@{mongod_host,ip}'"
Пользовательский синтаксис реализован с помощью некоторых простых манипуляций с регулярными выражениями, и в любом случае имеет дополнительное преимущество, заключающееся в том, что он более читабелен, чем встроенные.
Вывод
Порт плана «локального режима» и плагина для OpenStack прост, как показано выше. Остальная часть построения проекта — это просто обеспечение правильной зависимости между узлами и определение групп безопасности и общедоступных IP-адресов, чтобы все могли говорить. Следующее в списке: мониторинг контейнеров и автоматическое масштабирование для Kubernetes, предоставляемых Cloudify. Как всегда, комментарии приветствуются.
Чтобы глубже погрузиться в Cloudify и Kubernetes в гибридной среде на OpenStack, посмотрите видео ниже: