去年八月,我写了一篇文章,展示了如何在5分钟内使用Kubernetes或Docker Swarm在DigitalOcean上设置OpenFaaS。本周,DigitalOcean与OpenFaaS社区之间的合作达到了顶峰,这使得OpenFaaS一键式Droplet图像得以普遍提供。这使得通过DigitalOcean以最具成本效益的方式部署OpenFaaS变得更加容易。
现在,我们有三种方法有据可查,可以在DigitalOcean的基础架构上为您的团队设置OpenFaaS:
- 将OpenFaaS部署到DigitalOcean的Kubernetes服务(DOKS)
- 通过Kubernetes或Swarm与Ansible一起部署OpenFaaS
- 使用今天可用的新的一键式Droplet图像(本文)
在这篇文章中,我们将指导您使用一键式Droplet映像创建第一个OpenFaaS函数,该映像使用单节点Docker Swarm集群。
先决条件
- DigitalOcean帐户
- OpenFaaS CLI
现在,OpenFaaS CLI(或faas-cli
)是OpenFaaS开发人员经验的核心部分,我们的用户在本地及其CI作业中运行它。我们将使用它来创建功能并将其部署到您的一键式Droplet上。OpenFaaS文档提供了获取CLI所需的所有详细信息。
创建Droplet
访问您的Droplet
准备好Droplet后,它将显示在DigitalOcean资源窗格内的Droplet列表中。
复制IP地址,然后使用您喜欢的终端登录到Droplet,使用 root@<IP address>
注意:请确保您已为正在使用的客户端提供了适当的私钥。
登录后,请按照说明进行操作;在撰写本文时,只需按Enter。
将为您执行许多配置操作,结果将是运行中的基于Swarm的OpenFaaS实例。记下凭据-特别是最后一行将设置凭据的行faas-cli-在部署功能时将需要此凭据。现在,我们可以关闭与Droplet的连接。
在本地计算机上设置OPENFAAS_URL:
$ export OPENFAAS_URL=http://159.65.92.17:8080
要保留此设置,请将其添加到您的.bashrc文件或中.bash_profile。
运行CLI登录命令:
echo -n 6acf4e5dc4997530666fece7be3e15e5a1b7ba9572163aa2beb8ff9449ee1911 | faas-cli login --username=admin --password-stdin
当我们将功能部署到Droplet时,这将节省我们的时间和精力。
创建一个功能
我们将创建一个简单的Python函数,该函数在调用时将回显字符串。
- 为我们的功能创建一个工作区:
$ mkdir -p ~/openfaas/functions/ && cd ~/openfaas/functions/
-
hello-digitalocean
使用CLI 创建一个称为的函数:
将
rgee0
前缀替换为您自己的Docker Hub帐户名,以启用后续push
操作。
$ faas-cli new --lang=python3 --prefix=rgee0 hello-digitalocean
faas-cli new --lang=python3 --prefix=rgee0 hello-digitalocean
2019/02/02 11:42:08 No templates found in current directory.
2019/02/02 11:42:08 Attempting to expand templates from https://github.com/openfaas/templates.git
2019/02/02 11:42:10 Fetched 15 template(s) : [csharp csharp-armhf dockerfile go go-armhf java8 node node-arm64 node-armhf php7 python python-armhf python3 python3-armhf ruby] from https://github.com/openfaas/templates.git
Folder: hello-digitalocean created.
___ _____ ____
/ _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___|
| | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \
| |_| | |_) | __/ | | | _| (_| | (_| |___) |
\___/| .__/ \___|_| |_|_| \__,_|\__,_|____/
|_|
Function created in folder: hello-digitalocean
Stack file written: hello-digitalocean.yml
- 重命名
hello-digitalocean.yml
为stack.yml
:
$ mv hello-digitalocean.yml stack.yml
- 编辑
hello-digitalocean/handler.py
以添加我们函数的代码:
def handle(req):
"""handle a request to the function
Args:
req (str): request body
"""
return 'Hello from OpenFaaS on DigitalOcean!'
- 保存处理程序并运行
faas-cli up
以构建,推送和部署:
$ faas-cli up
[0] > Building hello-digitalocean.
Clearing temporary build folder: ./build/hello-digitalocean/
Preparing ./hello-digitalocean/ ./build/hello-digitalocean/function
Building: rgee0/hello-digitalocean:latest with python template. Please wait..
Sending build context to Docker daemon 8.192kB
Step 1/25 : FROM python:2.7-alpine
...
Successfully built 724a2e96754b
Successfully tagged rgee0/hello-digitalocean:latest
Image: rgee0/hello-digitalocean:latest built.
[0] < Building hello-digitalocean done.
[0] worker done.
[0] > Pushing hello-digitalocean [rgee0/hello-digitalocean:latest].
The push refers to repository [docker.io/rgee0/hello-digitalocean]
...
latest: digest: sha256:03ec049a59bd784a152ca3df8fcdffd97ab0dcb4392e0c2811ee5dcb4180ca2d size: 3655
[0] < Pushing hello-digitalocean [rgee0/hello-digitalocean:latest] done.
[0] worker done.
Deploying: hello-digitalocean.
Deployed. 202 Accepted.
URL: http://159.65.92.17:8080/function/hello-digitalocean
正如我们先前将CLI登录到我们的Droplet并设置一样
OPENFAAS_URL
,CLI将无缝地以Droplet为目标。为了推送到Docker Hub,您还需要在此登录到您的帐户。
- 使用以下命令调用功能
faas-cli
:
$ echo '' | faas-cli invoke hello-digitalocean
Hello from OpenFaaS on DigitalOcean!
通过访问访问UI以查看已部署的功能http://159.65.92.17:8080/ui/
。您需要以前的凭据才能访问该网站。
从这里您还可以调用函数-只需单击invoke按钮;您会注意到调用计数随您的增加而增加。您还可以通过OpenFaaS商店从一组现成的功能中进行部署-单击Deploy New Function
以查看可用功能。
包起来
我们已经开始使用DigitalOcean的OpenFaaS一键式应用程序创建函数的第一步。内置配置创建了一个基于Docker Swarm的可公开访问的实例,默认情况下启用了基本身份验证。我们已经研究了如何通过设置来使用OpenFaaS CLI构建功能并将其部署到远程实例OPENFAAS_URL
。
这是快速入门OpenFaaS的良好起点。实例启动并运行后,您可以理想地通过OpenFaaS Workshop进行工作。如果您已完全按照本文进行操作,那么您应该可以直接跳至实验2-记住将所有研讨会参考资料替换127.0.0.1
为Droplet的IP地址。