Статьи

Виртуальный кластер Mesos с Vagrant и шеф-поваром

Это переизданное гостевое сообщение в блоге Эд Роппл . Эд — инженер по платформам в Localytics. Его цель — позволить другим разработчикам программного обеспечения быть более продуктивными и менее подверженными ошибкам. Вы можете найти его оригинальную статью здесь.

С тех пор, как я начал работать в Localytics в Феврумархе или около того, я оказался в куче новых вещей. Мой предыдущий опыт работы был гораздо больше «подрабатывал разработчиком под руководством администратора», чем под девизом «DevOps Powers». В Localytics я довольно быстро выровнял их, и есть некоторые забавные вещи, о которых я бы хотел немного поговорить. Но сначала нам нужно выяснить, что мы хотим сделать общедоступным, и, скорее всего, он попадет в блог компании, прежде чем закончится здесь, поэтому я собираюсь немного поболтать о том, что я делаю в свободное время. время: настройка кластера Mesos и заполнение его приложениями для стороннего проекта или двух.

Что Месос?

Рад, что вы спросили, плод моего воображения! Mesos — это среда управления вычислениями, созданная в лаборатории AMP в Калифорнийском университете в Беркли. Идея, стоящая за Mesos и другими проектами «платформа как услуга» (PaaS), заключается в том, чтобы взять весь ваш центр обработки данных, весь его комплект и весь его набор и рассматривать его как единую гетерогенную вычислительную среду. Приложения не работают на серверах (ну, они работают, но только по моде); вместо этого они работают на весь проклятый центр обработки данных. Есть несколько других инструментов, которые действуют примерно так же, как Месос, среди них Деис и Флинн . Все они глубоко в восторге от статьи Google Omega , которую вы должны прочитать, потому что Google выполняет эту работу в масштабе. Различия между различными вариантами кластеризации в значительной степени заключаются в том, что Mesos более амбициозен, чем Deis и Flynn, и инструменты, которые каждый проект выбирает для своих целей.

По пути вы также увидите ссылки на Марафон . Это планировщик для Mesos, который действует как система инициализации — он предоставляет множество мозгов системы. Я буду добавлять его по мере продвижения.

Мне показалось, что это видео на Месосе, Марафоне и Докере действительно полезно для размышлений об этом, я предлагаю вам посмотреть его. Я смешнее, чем они, но они на самом деле знают, что делают. (Как они посмели.)

аппаратные средства

К сожалению, у меня нет дата-центра в моем доме. Я имею в виду, я рассмотрел стойку, но я достаточно плачу за кондиционер летом. Так что мое доступное оборудование немного ограничено. Мой бывший VM-сервер, теперь своего рода Docker, представляет собой Ivy Bridge i5 с 32 ГБ ОЗУ и несколькими терабайтами диска, является лучшим кандидатом для этой работы, но он также использует мой домашний VPN, и я не хочу шланг машины выше моих скудных сил реанимации. (Пока.) Итак, для первых частей этой серии я собираюсь построить кластер Mesos с тремя узлами на моем MacBook Pro.

Начиная

Прежде всего: я собираюсь загружать свои вещи, когда я иду на мезо-эксперименты на Github . Я буду отмечать состояние каждого сообщения; этот пост будет содержать blog-1 и blog-2.

Несмотря на то, что Mesos является проектом Apache, большая часть полезной документации находится на сайте Mesosphere . Мезосфера — коммерческое подразделение для Мезоса. Их страница «учиться» немного пугает. Мол, я знаю, что означают все слова, но будь я проклят, если знаю, что они значат, все связаны вместе. Но незнание первой вещи о чем-то никогда не останавливало меня прежде, так что мы продолжаем. Так как я использую Vagrant в OS X, у меня возникло искушение дать vagrant-mesos вращение, но у меня есть реальная проблема в том, что он поставляется предварительно собранным, и я не пойму, что я с ним делаю. Итак, это суп с орехами.

Месос предоставил инструкции для Ubuntu 14.04, поэтому я пошел дальше и взял коробку из глубин Интернета.

1
vagrant box add --name ubuntu-14.04-chef https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box

(Спасибо за коробку, Phusion! Ты лучшая компания, о которой я абсолютно ничего не знаю.)

Во всяком случае, в этой коробке Vagrant установлены Chef и Puppet; Я не партизан, если партией, против которой я ругаюсь, не является Chef Server, потому что мне этого хватило на одну жизнь. Так что повар Соло это так. Давайте начнем с нами какой-нибудь Бродяга

1
vagrant init

Vagrantfile по умолчанию заполнен комментариями, которые на данный момент в моей жизни Vagrant мне не нужны или не нужны, поэтому после удаления примерно одного комментария Пита и загрузки груза для меня несколько поваров-соло, вот что я получил:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu-14.04-chef"
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.synced_fonder './scripts', '/opt/scripts'
 
  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = [ "./chef/cookbooks", "./chef/librarian-cookbooks" ]
    chef.add_recipe "edcanhack_mesos"
 
    chef.json = {}
  end
end

Проницательные из нас заметят, что это относится к несуществующей поваренной книге шеф-повара. И проницательный среди нас может shaddap, большое спасибо, я добираюсь до этого. Чтобы избежать спама в ваших глазных яблоках, я опущу соединительную ткань системы, с которой я работаю (она в репо), и просто добавлю интересные кусочки моих кулинарных книг1.

На данный момент рецепт довольно прост:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
include_recipe "ubuntu"
include_recipe "python"
 
MESOS_DEB_URL="http://downloads.mesosphere.io/master/ubuntu/14.04/mesos_0.19.0~ubuntu14.04%2B1_amd64.deb"
 
case node[:platform]
when "ubuntu"
  %w"zookeeperd default-jre python-setuptools python-protobuf curl".each { |p| package p }
else
  raise "ubuntu only!"
end
 
 
remote_file "Mesos .deb" do
  source MESOS_DEB_URL
  path "/tmp/mesos.deb"
end
dpkg_package "Installing Mesos .deb" do
  source "/tmp/mesos.deb"
end
 
 
remote_file "Mesos .egg" do
  source MESOS_EGG_URL
  path "/tmp/mesos.egg"
end
bash "Installing Mesos .egg" do
  code "easy_install /tmp/mesos.egg"
end

Это основные предпосылки согласно странице предварительных условий Мезосферы . Я еще не продлил это для мультисерверов, очевидно, поэтому мы пока будем запускать то, что они называют одноэлементным кластером. К сожалению, хотя вы можете (нецелесообразно) перезагрузить компьютер в Chef, Vagrant потеряет все свои шарики, когда вы попытаетесь — угадайте, как я его нашел — поэтому мы сделаем это и сами.

1
vagrant up && vagrant halt && vagrant up # AND UP AND DOWN AND UP AND DOWN vagrant ssh -c "curl -i localhost:5050/master/health"

И… теперь у меня есть коробка, готовая к пулемету. (Это тег blog-1.)

1
2
3
HTTP/1.1 200 OK
Date: Fri, 11 Jul 2014 06:32:28 GMT
Content-Length: 0

Приложение приложение приложение

Итак, я пришел в Localytics как Scala Person, и я остаюсь им, но в конечном итоге я познакомился с Руби в немалой степени, выполняя неудобное количество волшебства Chef. Тем не менее, до сих пор нет понятия о Rails. Хорошие новости для меня сейчас, тем не менее, в том, что в Mesosphere есть учебник по размещению приложения Play в кластере Mesos. Итак, дай мне добраться до этого.

Если вы уже нажали на группу ссылок, вы, вероятно, знаете, что Mesos использует двухуровневый планировщик. Планировщик верхнего уровня является мастером Mesos. Его задача состоит в том, чтобы справедливо (или несправедливо, если это ваша сумка) распределять ресурсы по приложениям, работающим в его инфраструктуре. Фреймворки генерируют задания для запуска подчиненных Mesos, передавая их обратно через главный и вниз к подчиненным узлам для их запуска. Mesos поставляется с поддержкой Hadoop и Spark, а также с множеством других модных моделей в распределенном компьютерном балу. Месосфера также разработала собственную платформу под названием Marathon, которая предназначена для выполнения долгосрочных задач.

Мезосфера отличается от Flynn, Deis и Heroku тем, что она не использует модель git push ; вместо этого вы просто указываете на ZIP-файл, и он делает свое дело из этого. В Mesosphere есть проект PlayHello , с которого мы начнем. Более настойчиво, тем не менее, Шаг 1 их учебника говорит: «Иди скачай Марафон!» и я не могу потрудиться сделать это вручную, поэтому давайте добавим это в нашу поваренную книгу шеф-повара. (И, пока мы на этом, gem install marathon_client, так что у нас это будет на потом…)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
user "marathon"
remote_file "Marathon .tar.gz" do
  source MARATHON_URL
  path "/tmp/marathon.tar.gz"
end
bash "Installing Marathon" do
  code <<-ENDCODE
  tar xzf /tmp/marathon.tar.gz
  mv /tmp/marathon /opt/marathon
  chown -R marathon /opt/marathon
  ENDCODE
end
cookbook_file "Adding Marathon upstart script" do
  source "marathon_upstart.conf"
  path "/etc/init/marathon.conf"
end

Еще раз, орлиные глаза увидят там директиву cookbook_file . Тег blog-2 содержит файл «marathon_upstart.conf». Он исходит из сущности jalaziz, которая справляется со всеми вещами так же, как и я, хотя у него есть некоторые изящные идиоматические приемы, которые я никогда не видел, например, как он обрабатывает тесты на существование файлов (которые в ретроспективе довольно очевидны, но для меня новы ). Я обновил его, чтобы использовать стартовый скрипт Marathon, а не вызывать его напрямую, и удалил некоторые посторонние биты.

Каталоги в этом скрипте выскочки несколько волшебны, поскольку Mesos сбрасывает некоторые вещи в файловую систему в местах, где их ожидает Marathon. Когда мы дойдем до кластера, который не является одноэлементным, нам потребуется предоставить некоторую конфигурацию в / etc / default / marathon .

В любом случае, выполните повторную инициализацию с помощью vagrant- обеспечения , снова отбросьте серверы, и вы должны запустить Marathon на localhost: 8080. (Я также добавил порт перенаправления в / из порта 8080 и увеличил объем оперативной памяти до 2 ГБ в Vagrantfile .) Нажмите удобную кнопку «новое приложение».

  • ID: привет тест
  • Команда: ./Hello-*/bin/hello -Dhttp.port = $ PORT
  • Память: 512
  • ЦП: 0,5
  • Экземпляры: 1
  • URI: http://downloads.mesosphere.io/tutorials/PlayHello.zip

Вы должны увидеть экземпляр приложения с произвольным портом для его воспроизведения.

В первый раз, когда я сделал это, я не получил замечательное развернутое приложение, на которое я надеялся. Вместо нет-ничего. В моем приложении появились ноль экземпляров. Масштабируется, ничего хорошего; уменьшено, то же самое. Выяснилось, что я неправильно сконфигурировал Vagrant, имея слишком мало оперативной памяти для экземпляра, поэтому пошел и увеличил его. Новый сбой: приложение запустится и немедленно умрет. Обычно Mesos устанавливает свои журналы в $ MESOS_HOME , но ( прискорбно ), устанавливая его через пакет .deb, помещает вещи в… места. В конце концов я отследил вывод моих работников до директории на шесть уровней в глубине / tmp и на мгновение усомнился в моей стойкости, но все же продолжил.

Посмотри что я нашел:

1
root@ubuntu-14:/tmp/mesos/slaves/20140712-044358-16842879-5050-1169-0/frameworks/20140711-071659-16842879-5050-1167-0000/executors/hello-test_0-1405141392233/runs/latest# cat stderr

СЫН:

1
2
3
4
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0712 05:03:12.295583  3228 fetcher.cpp:73] Fetching URI 'http://downloads.mesosphere.io/tutorials/PlayHello.zip'
I0712 05:03:12.296902  3228 fetcher.cpp:123] Downloading 'http://downloads.mesosphere.io/tutorials/PlayHello.zip' to '/tmp/mesos/slaves/20140712-044358-16842879-5050-1169-0/frameworks/20140711-071659-16842879-5050-1167-0000/executors/hello-test_0-1405141392233/runs/4750cdfa-fcc2-44fb-a078-819edc3fdad7/PlayHello.zip'
sh: 1: unzip: not found

Но! Эта загадка раскрыта, теперь у нас есть… приложение Play hello-world.

Это тэг blog-2 в мезо-экспериментах, и пока это будет сделано. Для моего следующего трюка (и следующего поста) я соберу отдельного вторичного ведомого и добавлю немного магии Вагранта, чтобы позволить ему масштабироваться до произвольного числа подчиненных узлов.

Ссылка: Виртуальный кластер Mesos с Vagrant и Chef от нашего партнера JCG Мануэля Вейсса в блоге Codeship Blog .