Создайте свой бессерверный кластер Raspberry Pi с помощью Docker

задняя часть Docker малиновый пирог Swarm

Этот пост в блоге покажет вам, как использовать Docker иOpenFaaSFramework для создания собственного бессерверного кластера Raspberry Pi. Люди часто спрашивают меня, что я могу сделать с их кластером? И это приложение идеально подходит для устройств размером с карту — просто добавьте больше Raspberry Pi для большей вычислительной мощности.

«Бессерверный» — это шаблон проектирования для архитектуры, управляемой событиями, и, подобно терминам «шаблон моста», «шаблон фасада», «шаблон фабрики» и «облако», являются абстрактными понятиями.
Изображение: 3 нуля Raspberry Pi

Это кластер, который я описываю в этой статье, с латунными скобками, разделяющими каждое устройство.

Что такое бессерверное? Почему это важно?

В отрасли существует несколько интерпретаций термина «бессерверный». В этом сообщении блога мы понимаем его как архитектурный шаблон, управляемый событиями, который позволяет вам писать легкие, повторно используемые функции на любом языке, который вам нравится.Подробнее о бессерверных технологиях.

Бессерверная архитектура также ведет к модели «Функция как услуга», называемой FaaS.

Бессерверные «функции» могут делать что угодно, но обычно они используются для обработки определенного ввода — например, событий из GitHub, Twitter, PayPal, Slack, конвейера Jenkins CI или, в случае Raspberry Pi, для обработки таких вещей, как инфракрасное движение. сенсоры, лазерные накладки, термометры и другие сенсорные входы реального мира.

Бессерверная функция может лучше интегрировать сторонние серверные службы, так что общие возможности системы превышают сумму ее частей.

Для получения дополнительной справочной информации вы можете прочитать один из моих последних постов в блоге:Введение в функции как услугу (FaaS).

Обзор

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

Вот шаги, которые мы собираемся выполнить:

  • Настройте Docker на одном или нескольких хостах (Raspberry Pi 2 или 3);
  • Подключите их с помощью Docker Swarm;
  • развертыватьOpenFaaS;
  • Напишем нашу первую функцию на Python.

Docker Swarm

Docker — это технология упаковки и развертывания приложений, поддерживающая работу в кластерах, имеющая безопасные настройки по умолчанию и требующая только одной команды для настройки кластера. OpenFaaS использует Docker и Swarm для предоставления вашей бессерверной функциональности на доступном Raspberry Pi.

Я рекомендую вам использовать Raspberry Pi 2 или 3 для этого проекта, Ethernet-коммутатор иМощный многопортовый USB-адаптер питания.

Подготовить Распбиан

ПучокRaspbian Jessie LiteЗапись на SD-карту (8 ГБ подойдет, но рекомендуется SD-карта на 16 ГБ).

Примечание. Больше не скачивайте как Raspbian Stretch.

Сообщество работает над тем, чтобы Docker поддерживал Raspbian Stretch, но пока это не совсем сработало. Пожалуйста отВеб-сайт фонда Raspberry Piскачать Зеркало Джесси Лайт.

я рекомендую использоватьEtcher.ioСожгите изображение.

Перед загрузкой Raspberry Pi вам необходимо создать загрузочный раздел с именемsshпустой файл. Это позволит удаленный вход в систему.

接通电源,然后修改主机名

Теперь включите Raspberry Pi и используйтеsshсоединять:

$ ssh pi@raspberrypi.local
Пароль по умолчаниюraspberry

использоватьraspi-configинструмент для изменения имени хоста наswarm-1или что-то подобное, затем перезагрузите компьютер.

Когда вы дойдете до этого момента, вы также можете установить память, выделенную для графического процессора (графической карты), на 16 МБ.

现在安装 Docker

Мы можем использовать общий скрипт для установки:

$ curl -sSL https://get.docker.com | sh
Этот метод установки может измениться в будущем. Как упоминалось выше, ваша система должна быть Jessie, чтобы получить определенную конфигурацию.

Вы можете увидеть предупреждение, подобное следующему, но вы можете спокойно игнорировать его и успешно установить Docker CE 17.05:

WARNING: raspbian is no longer updated @ https://get.docker.com/  
Installing the legacy docker-engine package... 

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

$ usermod pi -aG docker
Если ваше имя пользователя неpi, затем замените его своим именем пользователя.

修改默认密码

входить$sudo passwd pi, затем установите новый пароль, не пропускайте этот шаг!

重复以上步骤

Теперь повторите вышеописанные шаги для другого Малинового Писа.

Создайте свой кластер Swarm

Войдите в свой первый Raspberry Pi и введите следующую команду:

$ docker swarm init
Swarm initialized: current node (3ra7i5ldijsffjnmubmsfh767) is now a manager.

To add a worker to this swarm, run the following command:

   docker swarm join \
--token SWMTKN-1-496mv9itb7584pzcddzj4zvzzfltgud8k75rvujopw15n3ehzu-af445b08359golnzhncbdj9o3 \
192.168.0.79:2377

Вы увидите, что он отображает пароль, а также команды для других узлов для присоединения к кластеру. Следующее использованиеsshВойдите в каждый Raspberry Pi и выполните эту команду, чтобы присоединиться к кластеру.

Дождавшись завершения соединения, просмотрим узлы кластера на первом Raspberry Pi:

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS  
3ra7i5ldijsffjnmubmsfh767 *   swarm1              Ready Active Leader 
k9mom28s2kqxocfq1fo6ywu63     swarm3              Ready Active 
y2p089bs174vmrlx30gc77h4o     swarm4              Ready Active 

поздравляю! Теперь у вас есть кластер Raspberry Pi!

更多关于集群的内容

Вы можете увидеть три запущенных узла. На данный момент только один узел является менеджером кластера. Если наш узел управлениякрушение, кластер перешел в невосстановимое состояние. Мы можем решить эту проблему, добавив резервные узлы управления. И они по-прежнему будут выполнять рабочую нагрузку, если вы явно не настроите свою службу для работы только на рабочих узлах.

Чтобы обновить рабочий узел до главного узла, просто запустите на одном из главных узловdocker node promote <node_name>Заказ.

Примечание. Команды Swarm, такие какdocker service lsилиdocker node lsМожет выполняться только на узле управления.

Для более глубокого понимания того, как узел управления и рабочие узлы поддерживают согласованность, вы можете обратиться кРуководство по администрированию Docker Swarm.

OpenFaaS

Теперь давайте перейдем к развертыванию программы, позволяющей нашему кластеру выполнять бессерверные функции.OpenFaaSявляется докером Сделайте любой процесс или контейнер бессерверной структурой на любом оборудовании или в облаке. Из-за переносимости Docker и Golang он также хорошо работает на Raspberry Pi.

если вы поддерживаетеOpenFaaS, надеюсь, ты сможешьзвезда OpenFaaSРепозиторий GitHub.

Войдите в свой первый Raspberry Pi (вы запускаетеdocker swarm initnode), затем разверните проект:

$ git clone https://github.com/alexellis/faas/
$ cd faas
$ ./deploy_stack.armhf.sh
Creating network func_functions  
Creating service func_gateway  
Creating service func_prometheus  
Creating service func_alertmanager  
Creating service func_nodeinfo  
Creating service func_markdown  
Creating service func_wordcount  
Creating service func_echoit  

Docer Swarm проинструктирует ваш другой Raspberry Pi начать извлекать образ Docker из Интернета и распаковывать его на SD-карту. Работа распределяется по узлам, поэтому ни один узел не создает избыточной нагрузки.

Этот процесс займет несколько минут, и вы можете проверить его завершение с помощью следующей команды:

$ watch 'docker service ls'
ID                  NAME                MODE                REPLICAS            IMAGE                                   PORTS  
57ine9c10xhp        func_wordcount      replicated          1/1                 functions/alpine:latest-armhf  
d979zipx1gld        func_prometheus     replicated          1/1                 alexellis2/prometheus-armhf:1.5.2 *:9090->9090/tcp  
f9yvm0dddn47        func_echoit         replicated          1/1                 functions/alpine:latest-armhf  
lhbk1fc2lobq        func_markdown       replicated          1/1                 functions/markdownrender:latest-armhf  
pj814yluzyyo        func_alertmanager   replicated          1/1                 alexellis2/alertmanager-armhf:0.5.1 *:9093->9093/tcp  
q4bet4xs10pk        func_gateway        replicated          1/1                 functions/gateway-armhf:0.6.0 *:8080->8080/tcp  
v9vsvx73pszz        func_nodeinfo       replicated          1/1                 functions/nodeinfo:latest-armhf  

Мы хотели бы видеть «1/1» для каждой службы.

Вы можете проверить, на какой Raspberry Pi отправляется служба, на основе имени службы:

$ docker service ps func_markdown
ID                  IMAGE                                   NODE    STATE  
func_markdown.1     functions/markdownrender:latest-armhf   swarm4  Running 

Элемент статуса должен отображатьсяRunning, если этоPending, то изображение все еще может загружаться.

На этом этапе проверьте IP-адрес Raspberry Pi, а затем войдите в его порт 8080 в браузере:

$ ifconfig

Например, если ваш IP-адрес 192.168.0.100, посетитеhttp://192.168.0.100:8080.

Здесь вы увидите пользовательский интерфейс FaaS (также называемый шлюзом API). Здесь вы определяете, тестируете и вызываете функции.

Нажмите на функцию преобразования Markdown с именем «func_markdown» и введите текст Markdown (это язык, который Википедия использует для организации контента).

Затем нажмите «вызвать». Вы увидите, что количество вызовов увеличилось, а результат вызова функции появится в нижней части экрана.

Разверните свою первую бессерверную функцию:

Для этого раздела уже есть руководства, но нам нужно выполнить несколько шагов для настройки Raspberry Pi.

获取 FaaS-CLI

$ curl -sSL cli.openfaas.com | sudo sh
armv7l  
Getting package https://github.com/alexellis/faas-cli/releases/download/0.4.5-b/faas-cli-armhf  

下载样例

$ git clone https://github.com/alexellis/faas-cli
$ cd faas-cli

为树莓派修补样例模版

Мы временно модифицируем наши шаблоны, чтобы они работали на Raspberry Pi:

$ cp template/node-armhf/Dockerfile template/node/
$ cp template/python-armhf/Dockerfile template/python/

Это сделано потому, что Raspberry Pi использует другую архитектуру процессора, чем большинство компьютеров, на которых мы обычно ориентируемся.

Чтобы узнать последние новости о Docker на Raspberry Pi, посетите:Пять вещей, которые вам нужно знать.

Теперь вы можете следовать инструкциям, написанным ниже для ПК, ноутбука и облака, но сначала нам нужно запустить некоторые команды на Raspberry Pi.

Обратите внимание на шаг 3:

  • Поместите свою функцию в ранее скачанный с GitHubfaas-cliпапка вместо~/functinos/hello-pythonвнутри.
  • В то же время вstack.ymlфайл вlocalhostЗамените на IP-адрес первого Raspberry Pi.

Кластеру может потребоваться несколько минут, чтобы загрузить бессерверные функции на связанный Raspberry Pi. Вы можете просмотреть свой сервис с помощью следующей команды, убедитесь, что запись реплики показывает «1/1»:

$ watch 'docker service ls'
pv27thj5lftz        hello-python        replicated          1/1                 alexellis2/faas-hello-python-armhf:latest  

Читайте дальше для учебника: Запустите свою первую бессерверную функцию Python с помощью OpenFaaS

Дополнительные сведения о Node.js или других языках см. на страницеСклад FaaS.

Метрики для проверки функций

Теперь, когда вы используете Serverless, вы также не хотите тратить время на мониторинг своей функциональности. К счастью, OpenFaaS имеет встроенныйPrometheusОбнаружение метрик, что означает, что вы можете отслеживать, как долго работает каждая функция и как часто она вызывается.

指标驱动自动伸缩

Если вы создадите достаточную нагрузку на функцию, OpenFaaS автоматически масштабирует вашу функцию; когда спрос исчезнет, ​​вы вернетесь к состоянию единственной копии.

Этот образец запроса вы можете скопировать в свой браузер:

Просто измените IP-адрес на свой.

http://192.168.0.25:9090/graph?g0.range_input=15m&g0.stacked=1&g0.expr=rate(gateway_function_invocation_total%5B20s%5D)&g0.tab=0&g1.range_input=1h&g1.expr=gateway_service_count&g1.tab=0  

Эти запросы написаны с использованием PromQL (язык запросов Prometheus). Первый запрос возвращает частоту вызовов функции:

rate(gateway_function_invocation_total[20s]) 

Второй запрос показывает количество реплик для каждой функции, которое должно начинаться только с одной реплики для каждой функции.

gateway_service_count  

Если вы хотите запустить автоматическое расширение, вы можете попробовать следующую команду на Raspberry Pi:

$ while [ true ]; do curl -4 localhost:8080/function/func_echoit --data "hello world" ; done

Посетите страницу «оповещения» Prometheus, чтобы узнать, генерируете ли вы достаточную нагрузку для запуска автомасштабирования. Если нет, вы можете попробовать запустить указанную выше команду на нескольких терминалах одновременно.

По мере уменьшения нагрузки количество реплик отображается на втором графике, иgateway_service_countИндикатор снова упал до 1.

заключительная речь

Теперь у нас есть настроенный Docker, Swarm и OpenFaaS, запускающий код, используя Raspberry Pi как мейнфрейм.

Надеюсь, вы все поддержите этот проект,звезда Репозиторий GitHub для FaaS.

Как вы настроили свой собственный кластер Docker Swarm и запустили OpenFaaS? в Твиттере@alexellisukПоделитесь своими фотографиями или твитами на .

Посмотрите мое видео об OpenFaaS на Dockercon

я здесьДокеркон в ОстинеOpenFaaS демонстрируется на . - Посмотрите видео для ознакомления и интерактивных примеров:https://www.youtube.com/embed/-h2VTE9WnZs

Что-то не так? Спросите в комментариях ниже или напишите мне и пригласите меня на свой канал Slack, где вы и ваши единомышленники обсуждаете Raspberry Pi, Docker, Serverless.

Хотите узнать больше о запуске Docker на Raspberry Pi?

Я рекомендую начать сПять вещей, которые вам нужно знатьДля начала он охватывает такие темы, как безопасность, тонкие различия между Raspberry Pi и обычным ПК.


via: https://blog.alexellis.io/your-serverless-raspberry-pi-cluster/

автор:Alex EllisПереводчик:haoqixuВычитка:wxy

Эта статья написанаLCTTоригинальная компиляция,Linux КитайЧесть запуска