Статьи

Оркестровка кубернетов в OpenStack

OpenStack |  OpenStack Summit |  TOSCA Cloud Orchestration |  Микросервисы |  Kubernetes Orchestration |  OpenStack NFV |  Kubernetes Cluster

В моем предыдущем посте я обсуждал усовершенствование исходного базового плагина Kubernetes до версии, которая была достаточно функциональной. Эта версия была разработана для использования  Fabric  и работы на существующих машинах (виртуальных или «голых»). В этом посте обсуждаются изменения, необходимые для создания того же гибридного развертывания, что и раньше, но размещенного в  OpenStack .

Управляющее резюме

Для тех, кто заинтересован в конечном результате без технических подробностей, продвижение по сравнению с предыдущим постом состоит в переносе плагина для использования в управляемой среде Cloudify и создании проекта OpenStack, который:

  1. Предоставляет виртуальные машины для хранения  кластера Kubernetes  и экземпляра MongoDB.
  2. Устанавливает Kubernetes и MongoDB отдельно.
  3. Развертывает и настраивает распределенное приложение 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, посмотрите видео ниже: