当前位置: 首页 > 科技观察

使用Docker构建您的无服务器树莓派集群

时间:2023-03-14 14:57:18 科技观察

这篇博文将向您展示如何使用Docker和OpenFaaS框架构建您自己的无服务器树莓派集群。人们经常问我可以用他们的集群做什么?此应用程序非常适合卡片大小的设备-只需添加更多RaspberryPi即可获得更多计算能力。“无服务器”(serverless)是事件驱动架构的一种设计模式,与“桥接模式”、“门面模式”、“工厂模式”、“云”等术语一样,是一种抽象。图片:3个RaspberryPiZeros这是我在本文中描述的集群,用黄铜支架将每个设备分开。什么是无服务器?它为什么如此重要?业界对“无服务器”一词的含义有多种解释。在这篇博文中,我们将其理解为一种事件驱动的架构模式,允许您使用您喜欢的任何语言编写轻量级和可重用的功能。有关无服务器的更多信息,请参见此处。Serverless架构也导致了“函数即服务”模型,简称FaaSServerless“函数”可以做任何事情,但通常用于处理给定的输入——例如来自GitHub、Twitter、PayPal、Slack、JenkinsCI管道的事件;或者以树莓派为例,处理来自红外运动传感器、激光绊线、温度计等现实世界传感器的输入。无服务器功能可以更好地集成第三方后端服务,使系统的整体能力更强比其各部分的总和。有关更多背景信息,您可以阅读我最近的博文:函数即服务(FaaS)简介。概述我们将使用OpenFaaS,它允许主机或集群作为运行Serverless功能的后端。任何可以使用Docker部署的可执行二进制文件、脚本或编程语言都可以在OpenFaaS上运行,您可以根据速度和可扩展性选择部署规模。另一个优点是它还具有内置的用户界面和监控系统。以下是我们将采取的步骤:在一台或多台主机(RaspberryPi2或3)上配置Docker;使用DockerSwarm连接它们;部署OpenFaaS;用Python编写我们的第一个函数。DockerSwarmDocker是一种打包部署应用程序的技术,支持在集群上运行,具有安全的默认设置,在构建集群时只需要一个命令。OpenFaaS使用Docker和Swarm在可用的RaspberryPi上提供无服务器功能。我建议您为此项目使用RaspberryPi2或3、以太网交换机和功能强大的USB多端口电源适配器。准备Raspbian以将RaspbianJessieLite写入SD卡(8GB即可,但建议使用16GBSD卡)。注意:不要下载RaspbianStretch社区正在努力让Docker支持RaspbianStretch,但它还不能完美运行。请从RaspberryPiFoundation网站下载JessieLite镜像。我推荐使用Etcher.io来刷新图像。在启动树莓派之前,您需要在启动分区上创建一个名为ssh的空白文件。这将允许远程登录。打开并更改主机名现在打开RaspberryPi的电源并使用ssh连接:$sshpi@raspberrypi.local默认密码是raspberry使用raspi-config工具将主机名更改为swarm-1或类似名称,然后重新启动。走到这一步,还可以将分配给GPU(显卡)的显存设置为16MB。现在安装Docker我们可以使用一个通用的脚本来安装:$curl-sSLhttps://get.docker.com|sh这个安装方式以后可能会改变。如上所述,您的系统需要是Jessie才能获得特定配置。您可能会看到类似于以下的警告,但您可以安全地忽略它并成功安装DockerCE17.05:WARNING:raspbianisnolongerupdated@https://get.docker.com/Installingthelegacydocker-enginepackage...之后,使用以下Make确保您的用户帐户可以访问Docker客户端:$usermodpi-aGdocker如果您的用户名不是pi,请将其替换为您的用户名。要更改默认密码,请输入$sudopasswdpi,然后设置新密码,请不要跳过此步骤!重复上述步骤现在重复上述步骤的其他步骤。\--tokenSWMTKN-1-496mv9itb7584pzcddzj4zvzzfltgud8k75rvujopw15n3ehzu-af445b08359golnzhncbdj9o3\192.168.0.79:2377你会看到它显示密码,以及其他节点加入集群的命令。NextlogintoeachRaspberryPiusingsshandrunthecommandtojointhecluster.等待连接完成后,在第一个树莓派上查看集群的节点:$dockernodelsIDHOSTNAMESTATUSAVAILABILITYMANAGERSTATUS3ra7i5ldijsffjnmubmsfh767*swarm1ReadyActiveLeaderk9mom28s2kqxocfq1fo6ywu63swarm3ReadyActivey2p089bs174vmrlx30gc77h4oswarm4ReadyActive恭喜你!你现在拥有一个树莓派群了!更多关于群的内容你可以看到三个节点启动运行。此时只有一个节点是集群管理器。如果我们的管理器节点死亡,集群将进入不可恢复的状态。我们可以通过增加冗余的管理节点来解决这个问题。除非您明确将服务设置为仅在工作节点上运行,否则它们仍将运行工作负载。要将工作节点提升为管理节点,只需在其中一个管理节点上运行dockernodepromote命令。注意:dockerservicels或dockernodels等Swarm命令只能在管理器节点上运行。要深入了解管理节点和工作节点如何保持一致性,请查看DockerSwarm管理指南。OpenFaaS现在我们继续部署程序,让我们的集群可以运行Serverless功能。OpenFaaS是一个框架,它使用Docker使任何进程或容器成为任何硬件或云上的Serverless功能。由于Docker和Golang的可移植性,它在RaspberryPi上也运行良好。如果你支持OpenFaaS,我希望你能为OpenFaaSGitHub存储库加注星标。登录你的第一个树莓派(你运行dockerswarminit的节点),然后将这个项目放在:$gitclonehttps://github.com/alexellis/faas/$cdfaas$./deploy_stack.armhf.shCreatingnetworkfunc_functionsCreatingservicefunc_gatewayCreatingservicefunc_prometheusCreatingservicefunc_alertmanagerCreatingservicefunc_nodeinfoCreatingservicefunc_markdownCreatingservicefunc_wordcountCreatingservicefunc_echoit你的它它RaspberryPi将接收来自Internet的命令,DockerSwarm图像并从它解压缩到DockerSwarm图像。工作分布在节点之间,因此没有单个节点过载。这个过程会持续几分钟,你可以用下面指令查看它的完成状况:$watch'dockerservicels'IDNAMEMODEREPLICASIMAGEPORTS57ine9c10xhpfunc_wordcountreplicated1/1functions/alpine:latest-armhfd979zipx1gldfunc_prometheusreplicated1/1alexellis2/prometheus-armhf:1.5.2*:9090->9090/tcpf9yvm0dddn47func_echoitreplicated1/1functions/alpine:latest-armhflhbk1fc2lobqfunc_markdownreplicated1/1functions/markdownrender:latest-armhfpj814yluzyyofunc_alertmanagerreplicated1/1alexellis2/alertmanager-armhf:0.5.1*:9093->9093/tcpq4bet4xs10pkfunc_gatewayreplicated1/1functions/gateway-armhf:0.6.0*:8080->8080/tcpv9vsvx73pszzfunc_nodeinforeplicated1/1functions/nodeinfo:latest-armhfWeexpecttosee"1/1"displayedforeachservice.YoucancheckwhichRaspberryPitheserviceisscheduledtobytheservicename:$dockerservicepsfunc_markdownIDIMAGENODESTATEfunc_markdown.1functions/markdownrender:latest-armhfswarm4RunningstatusshouldshowRunning,ifitisPending,thentheimagemaystillbedownloading.Atthispoint,lookattheRaspberryPi'sIPaddress,thenvisititsport8080inabrowser:$ifconfigForexample,ifyourIPaddressis192.168.0.100,thenvisithttp://192.168.0.100:8080.在这里您将看到FaaSUI(又名API网关)。这是您定义、测试和调用函数的地方。单击名为“func_markdown”的Markdown转换功能,然后输入一些Markdown(维基百科用来组织内容的语言)文本。然后点击“调用”。您会看到调用次数增加,并且函数调用的结果显示在屏幕底部。部署你的第一个Serverless功能:这部分已经有教程,但我们需要几个步骤来配置RaspberryPi。获取FaaS-CLI$curl-sSLcli.openfaas.com|sudosharmv7lGettingpackagehttps://github.com/alexellis/faas-cli/releases/download/0.4.5-b/faas-cli-armhf下载示例$gitclonehttps://github。com/alexellis/faas-cli$cdfaas-cli修补RaspberryPi的示例模板让我们暂时修改我们的模板,以便它们在RaspberryPi上工作:$cptemplate/node-armhf/Dockerfiletemplate/node/$cptemplate/python-armhf/Dockerfiletemplate/python/这样做是因为树莓派使用的处理器架构与我们平时关注的大多数计算机不同。有关RaspberryPi上Docker的最新状态,请查看:您需要了解的5件事。现在您可以按照下面为PC、笔记本电脑和云编写的教程进行操作,但我们将首先在RaspberryPi上运行一些命令。使用OpenFaaS运行您的第一个无服务器Python函数注意第3步:将您的函数放在您之前从GitHub下载的faas-cli文件夹中,而不是~/functinos/hello-python。另外,将stack.yml文件中的localhost替换为第一个RaspberryPi的IP地址。集群可能需要几分钟才能将无服务器功能下载到关联的RaspberryPi。您可以使用以下命令检查您的服务并确保副本项显示“1/1”:$watch'dockerservicels'pv27thj5lftzhello-pythonreplicated1/1alexellis2/faas-hello-python-armhf:latest继续阅读教程:使用OpenFaaS要运行您的有关Node.js或其他语言的更多信息,第一个无服务器Python功能,您可以进一步访问FaaS存储库。检查功能指标由于您使用的是无服务器,因此您不想花时间监控您的功能。幸运的是,OpenFaaS具有内置的Prometheus指标工具,这意味着您可以跟踪每个函数运行了多长时间以及它被调用的频率。指标驱动的自动缩放如果你为一个函数生成足够的负载,OpenFaaS将自动缩放你的函数;当需求减少时,您又回到了单个副本。您可以将此示例请求复制到您的浏览器中:只需将IP地址更改为您的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(普罗米修斯请求语言)编写的。第一个请求返回函数调用频率:rate(gateway_function_invocation_total[20s])第二个请求显示每个函数的副本数,最初每个函数应该只有一个副本。gateway_service_count如果你想触发自动缩放,你可以在树莓派上尝试以下命令:$while[true];docurl-4localhost:8080/function/func_echoit--data"helloworld";done查看Prometheus的“警报”页面,可以知道您是否正在生成足够的负载来触发自动缩放。如果没有,您可以尝试在多个终端同时运行上述命令。当您减少负载时,副本计数显示在您的第二个图表中,并且gateway_service_count指标再次回落到1。结束我们现在拥有Docker、Swarm和OpenFaaS运行代码,将RaspberryPi用作大型计算机。您是如何使用OpenFaaS启动并运行自己的DockerSwarm集群的?在Twitter@alexellisuk上分享您的照片或推文。在Dockercon上观看我关于OpenFaaS的视频我在奥斯汀的Dockercon上演示了OpenFaaS。-观看介绍和互动示例的视频:https://www.youtube.com/embed/-h2VTE9WnZs有问题吗?在下面的评论中询问他们,或者给我发电子邮件,邀请我与志同道合的人一起讨论Raspberry,并在Slack频道讨论Pie、Docker、Serverless。想了解更多有关在RaspberryPi上运行Docker的信息吗?我建议从您需要知道的五件事开始,其中涵盖安全性、RaspberryPi和普通PC之间的细微差别等主题。Dockercon提示:Docker和RaspberryPi使用DockerSwarm控制GPIO这是你口袋里的Docker引擎吗?