Этот пост в блоге покажет вам, как использовать Docker иOpenFaaSFramework для создания собственного бессерверного кластера Raspberry Pi. Люди часто спрашивают меня, что я могу сделать с их кластером? И это приложение идеально подходит для устройств размером с карту — просто добавьте больше Raspberry Pi для большей вычислительной мощности.
«Бессерверный» — это шаблон проектирования для архитектуры, управляемой событиями, и, подобно терминам «шаблон моста», «шаблон фасада», «шаблон фабрики» и «облако», являются абстрактными понятиями.
Это кластер, который я описываю в этой статье, с латунными скобками, разделяющими каждое устройство.
Что такое бессерверное? Почему это важно?
В отрасли существует несколько интерпретаций термина «бессерверный». В этом сообщении блога мы понимаем его как архитектурный шаблон, управляемый событиями, который позволяет вам писать легкие, повторно используемые функции на любом языке, который вам нравится.Подробнее о бессерверных технологиях.
Бессерверные «функции» могут делать что угодно, но обычно они используются для обработки определенного ввода — например, событий из 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 init
node), затем разверните проект:
$ 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:
- Поместите свою функцию в ранее скачанный с GitHub
faas-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 и обычным ПК.
- Dockercon tips: Docker & Raspberry Pi
- Control GPIO with Docker Swarm
- Is that a Docker Engine in your pocket??
via: https://blog.alexellis.io/your-serverless-raspberry-pi-cluster/
автор:Alex EllisПереводчик:haoqixuВычитка:wxy
Эта статья написанаLCTTоригинальная компиляция,Linux КитайЧесть запуска