Faasd-轻量级无服务器,适用于您的树莓PI(2020年更新)

2020-10-24 18:57:54

今天就用FASID踢轮胎,享受不需要Kubernetes的轻量级无服务器体验。相反,它使用的是tainerd和现有的OpenFaaS生态系统。

上次更新时间:2020年10月18日-升级了faasd&;tainerd版本。新增网关等核心组件日志说明。

您可以在任何地方运行faasd,甚至可以在树莓PI上运行,但是您为什么要这样做呢?Faasd提供了容器和OpenFaaS的许多优点,但没有Kubernetes的复杂性和操作成本。Tainerd是一个自动化容器的低级工具,也是一个CNCF项目。

无服务器/FAAS的用例是相当知名的,但是您可以在边缘使用faasd,在智能汽车中,作为物联网设备的一部分,在将示例上传到云之前处理数据,用于WebHook接收器/警报、机器人、WebServices、API集成,甚至提供您自己的API。COMPUTE就是COMPUTE,而带有容器的OpenFaaS使消费和提供都变得容易。

新消息:faasd已成为OpenFaaS GitHub组织的一部分!您甚至可以在几分钟内将faasd部署到您最喜欢的云中。

本教程使用Raspbian或Raspbian Lite(现在称为RaspiOS)。请勿在同一个Raspberry PI上安装Docker,因为这可能会导致与网络和我们正在使用的Containerd版本发生冲突。

您应该使用RPI 2、3或4。如果您只有一个Raspberry PI,那么您将能够从OpenFaaS Function Store部署预先构建的映像,但是如果您有第二个Raspberry PI,那么您也可以使用它来构建新函数。

安装只需要几分钟的时间,如果我们能从上游项目获得容器d的二进制文件,将来应该会更快。

Faas-cli可用于构建、部署、管理和调用OpenFaaS的功能。OpenFaaS提供REST API、异步调用、身份验证、指标和开箱即用的UI。

不幸的是,tainerd维护者只提供x86_64(普通PC)的二进制文件,所以我们必须安装GO并从源代码构建tainerd。

Sudo apt update\&;&;sudo apt install-qy\runc\bridge-utils\tmux\git。

Sudo apt update\&;&;sudo apt install-qy\build-Essential\libbtrfs-dev\libseccomp-dev。

这在RPi2或RPi3上可能需要一些时间,在RPi4上会更快一些。

检查tainerd是否以sudo systemctl status tainerd启动,如果不是,则可能需要取消它的掩码,然后再次运行命令。请参阅取消屏蔽服务。

#one-offsudo modbe br_netfilter&;&;\sudo sysctl net.bridge ge.bridge-nf-call-iptables=1#使其永久回显";br_netfilter";|sudo tee-a/etc/module-load.d/modes.confecho";net.bridge.bridge-nf-call-iptables=1";|sudo tee-a/etc/sysctl.conf。

可选步骤-如果您的系统上正在运行Docker,则将其禁用并在此时重新启动。

Sudo systemctl禁用dockersudo systemctl禁用docker.sock#或docker.socket-您可能还需要此步骤。

Docker的IP地址范围与NetNS选择的IP地址范围冲突,此问题将在迁移到CNI时解决。

Faasd是一个在您的系统上运行的Go二进制文件,可以打包所有的OpenFaaS,它是一个类似于docker-compose的工具。

Faasd的命令之一faasd Provider运行OpenFaaS提供程序,该提供程序实现函数的OpenFaaS CRUD;API。

#停止systemd服务,如果您有sudo systemctl stop faasdsudo systemctl stop faasd-Provider#如果您有sudo rm-rf/usr/local/bin/faasd,请删除旧的二进制文件。

Faasd install命令创建两个systemd单元文件,可用于启动/停止faasd和faasd-Provider。

您将在/var/lib/faasd/secrets中找到网关的登录详细信息,用户是admin,密码在/var/lib/faasd/secrets/basic-auth-password中。

您可以从使用faasd部署的任何核心服务访问日志,如下所示:

Sudo Jouralctl-t默认值:Gateway--行40sudo Jouralctl-t默认值:NAT--行40sudo Jouralctl-t默认值:Queue-Worker--行40sudo Jouralctl-t默认值:普罗米修斯--行40。

Faasd部署OpenFaaS及其核心逻辑faasd-Provider,后者使用tainerd而不是Kubernetes来启动、停止和管理功能。

Faasd进程会将HTTP端口8080上的任何传入请求代理到OpenFaaS网关容器,您还可以在faasd目录下的hosts文件中找到容器的IP。

您还可以通过编辑docker-compose.yaml来访问内置的Prometheus容器,以向127.0.0.1或您的所有网络适配器公开其端口。

#如果连接远程导出IP=192.168.0.101导出OPENFAAS_URL=http://$IP:8080echo$PASSWORD|FAAS-CLI登录#或在设备上:SUDO cat/var/lib/faasd/secrets/basic-auth-password|faas-cli登录--password-stdin。

查看用于armhf平台的函数存储区中提供的内容,然后部署以下内容:

Faas-cli存储列表--platform armhf#部署figletfaas-cli store Deploy--platform armhf figlet#查找函数的URL faas-cli store check figlet#创建一些ASCIIecho";faasd&34;|faas-cli调用figlet。

尝试一个可以生成身份的函数,就像你在GitHub.com上看到的默认头像徽标一样

您将需要第二个树莓圆周率这一步。您也可以使用我预构建的函数之一,比如ascii-2020,但是您应该只运行Faas-cli部署步骤。

您可以将OpenFaaS网关设置为指向运行faasd的RPI。

您的新函数将在第一个Raspberry PI上拉下并开始执行。查找用于调用函数的IP地址/URL,同步和异步调用都在工作:

现在,试着在hello-world/handler.go中编辑函数的源代码,让它打印一条不同的消息。我们选择的模板使用gofmt运行验证,因此如果您已经在RPI上进行了编辑,您可能需要在进行构建之前格式化文本。

您的工作流只是Faas-cli up,或者是Faas-cli构建、Faas-cli推送和Faas-cli部署的单独步骤。

支持私有注册表,如Docker Hub、AWS ECR、GitLab或您自己的私有托管注册表。

注意:如果您想设置您自己的注册表,请使用k3sup遵循我的5分钟教程。

要使用私有容器映像注册表,只需在您的PC或笔记本电脑上运行docker login,然后将$HOME/.docker/config.json文件复制到运行faasd的位置。确保文件中的值是用Base64编码的,而不是使用Docker for Mac/Windows凭据助手,这样您就可以使用了。

入口可以帮助我们获得公共IP并进入我们的功能,这是通过到云IaaS或VPS提供商(如DigitalOcean)上的主机的隧道来完成的。

您需要云的访问令牌才能访问受支持的提供商之一,请参阅上的列表:inletsctl create--help。

我选择了DigitalOcean并运行create命令来配置退出服务器,这是一个具有公共IP的面向公众的主机。

注意:我们创建的主机将花费大约5美元/月,因为只要您保持运行,您就可以随时运行inletsctl delete,或者从您的仪表板中删除VM。您可以向一些提供免费级别或积分的云提供商免费运行退出节点。

几秒钟后,主机将开始运行Inlets服务器,现在您可以继续在RPI上运行Inlets客户端。我喜欢使用tmux或Screen运行命令,这样我就可以注销,而它们仍在运行。您还可以使用systemd单元文件或@reboot等Cron条目使inlets客户机成为永久性的。

这是inletsctl create打印出的命令,只需编辑上游命令,使其指向127.0.0.1:8080上的faasd,然后按Enter。

您的功能现在可以通过公共互联网访问,您可以随意与您的朋友共享URL。

基本身份验证是指OpenFaaS的UI和API是受保护的,但默认情况下可以访问功能。

您甚至可以通过SSH登录到您的出口节点并安装Nginx或Caddy,从而将TLS添加到您的出口节点。

我为Caddy编写了一个教程,名为HTTPS,适用于带有入口和Caddy的本地端点,以下是从我的域faasd.myfaas.Club的出口节点提供TLS证书时的实际效果。

现在我更喜欢使用inlets-pro,这意味着我可以直接在RPI上运行Caddy,并在设备本身上获得一个LetsEncrypt证书。

Inlets-PRO还配备了通过线路进行链路级加密的功能,并且能够代理来自NAT后面的任何L4 TCP流量。

购买Inlets Pro或注册一个免费的14天试用来踢轮胎:Inlets Pro。

现在尝试重新启动您的RPI,您应该会看到网关随后再次打开。您部署的函数仍将存在,但已缩放为零,因此第一次调用将再次预热它们,此过程可能需要大约0.38秒。在PC上,这甚至更快。

如果需要手动删除函数,可以这样做:

导出fn=";figlet";sudo ctr--命名空间openfaas-fn任务删除-f$FNsudo ctr--命名空间openfaas-fn容器删除$FNsudo ctr--命名空间openfaas-fn快照删除$fn-SNAPSHOT

Fasd为您的Raspberry PI、云基础架构和裸机带来了轻量级体验,所有这些都不需要Kubernetes。该解决方案仍在积极开发中,因此您可能还不想将其投入生产,但是我们进展很快,并且已经拥有异步调用、身份验证和函数存储支持。

如果您觉得安装过程有点繁琐,那么请不要担心:我们还有一个安装脚本,欢迎您尝试。

通过社区内部人员订阅,及时了解有关faasd和我的其他工作的最新信息。

这款RPi3有1 GB内存和4个内核。目前,它正在运行@openfaas@Nats_io@PrometheusIO@inletsdev@tainerd,但没有看到Kubernetes。这意味着我们还有空间用于https://t.co/WW5TZVdAeU🤓pic.twitter.com/JYeV1nSToK的一些函数。

-亚历克斯·埃利斯(@alexellisuk)2020年1月8日。

您可能想知道用faasd在新的RPI上运行什么。任何OpenFaaS代码都应该能够运行,无论是API、函数、微服务还是简单的网页。下面是我脑海中浮现的几个想法:

家庭服务器和物联网设备的自动化-使用功能向您的智能家居发送呼叫?

您可以将faasd用于客户端项目和工作。我已经为您提供了一种使用单个复制/粘贴和您的云提供商的仪表板自动执行整个过程的方法。

Faasd不需要复杂的服务器管理或集群配置,您甚至可以使用GitLab或GitHub操作集成CI/CD管道,在几分钟内,您就可以通过将代码推送到Git存储库来更新TLS端点。

在GitHub上为openfaas/faasd投稿-您需要对Golang和Containers有基本的了解