谈起构建一个云端项目,你会想到什么?复杂的服务器购买流程和配置、各种复制的环境依赖安装、Docker镜像的打包和构建,还是令人头疼的后期运维......
然而,现在随时随地都能看见一个新的项目,每个有趣的项目都会带来很多的流量,这看起来并不复杂。但是各个平台又有部分接口的不兼容,几经周折,构建好了一个平台,最终发现流量极低。如果此时再去开发其他平台,得不偿失。
如何构建一个有趣的项目,只需一次构建就能多平台调用呢,现在有请我们今天的主角,最近非常火爆的函数即服务:FaaS !
什么是函数即服务 (FaaS)?
函数即服务 (FaaS) 是一种云计算形式,可帮助开发人员更好地工作,无需他们维护应用程序基础架构。当开发人员利用FaaS时,他们使用FaaS平台为他们构建、运行和监督应用程序包。
在这一点上,您可能会认为FaaS听起来像无服务器计算 ——它确实如此。无服务器计算允许开发人员将管理数据库、API网关、存储、消息传递和其他基础设施外包给第三方提供商。FaaS 是一种无服务器计算。
不过这个无服务器是指用户在使用Faas构建应用时无需创建服务器,而服务提供商的底层依旧是服务器架构,对于用户来说只需要输入参数即可构建应用,实在是太方便了。
Lighthouse OpenFaaS
轻量应用服务器Lighthouse区别于普通云服务器,主要面向轻量级的应用场景,为用户提供开箱即用的云服务器产品。它将基础的云资源统一打包进套餐,同时为用户提供丰富的应用镜像,除了包含底层的操作系统之外,还分别封装了各个场景下必需的应用软件,为用户免去了购买普通云服务器时繁琐的应用部署、配置和初始化过程,购买即可用。
优惠链接:https://url.cn/cwrkpDAT
OpenFaas 简介
OpenFaaS 是一款高人气的开源的 faas 框架,开发人员可以借助 OpenFaaS 将事件驱动的功能和微服务部署到 Kubernetes,而无需编写重复、枯燥的样板编码。只需将代码或现有二进制文件打包到 Docker 镜像中,以获得具有自动缩放和监控指标的高度可扩展端点(Endpoints)。
OpenFaas 特点
- 平台无关:OpenFaas 是开源框架,可以部署在任意云平台,无需担心平台锁定的问题
- 语言无关:任意语言编写的函数均可打包至 Docker 镜像并部署运行
- 使用简单:内置 UI,丰富的 CLI 命令和一键安装
- 灵活伸缩:高峰期自动扩容,空闲时自动缩容
- 社区活跃
函数即服务
服务器准备
想要使用自建OpenFaaS,首先你需要一台轻量应用服务器,镜像直接选择 OpenFaaS 1.0.0:
购买完成后进入产品控制台,找到已经创建的实例,在详情页-应用管理中能够看到如下信息:
或者你已经拥有了一台轻量应用服务器,那么只需要在重装系统时选择 OpenFaaS 1.0.0 镜像即可~
此刻,在确保服务器正常运行的情况下,便可以通过应用管理页面提供的访问地址访问OpenFaaS 1.0.0管理后台,获取密码请在控制台输入命令:
代码语言:shell复制cat ~lighthouse/credentials.txt
登录之后我们可以看到官方提供了一些示例Function,点击Deploy New Function即可查看
点击 deploy 之后等待状态 ready 之后就可以进行使用了,点击 invoke 进行调用,这个 function 是用来获取主机信息的。
构建自己的Function
首先登录到服务器,安装OpenFaaS提供的命令行工具:
代码语言:shell复制$ curl -sSL https://cli.openfaas.com | sudo sh
faas-cli 基础命令
代码语言:shell复制# 最新模板下载到本地
faas-cli template pull
# 查询 openfaas 的模板列表
faas-cli new --list
# 创建模板函数
# 执行以下命令即可创建函数,add是函数名,python是语言类型
faas-cli new qdfaas --lang python
说明: 当前目录下,产生名为qdfaas的文件夹,以及名为qdfaas.yml的文件;
qdfaas.yml 内容如下:
进入qdfaas文件夹,看到faas-cli帮我们生成的源码文件handler.py,默认代码:
代码语言:python代码运行次数:0复制def handle(req):
"""handle a request to the function
Args:
req (str): request body
"""
return req
可以改成自己需要的函数,构成服务。
我们这里使用一个普通的函数来构建:
代码语言:python代码运行次数:0复制def handle(req):
array = req.replace('n', '').split(',')
num = 0
for a in array:
num -= int(a)
return num
构建函数
完成函数后,使用以下命令构建函数。
代码语言:text复制faas-cli build -f qdfaas.yml --shrinkwrap
构建成功后会看到目录内多出了 build 文件夹。
在本地构建Docker镜像之前要记得先登录,博主就是一直报错,后来才发现需要登录:
代码语言:shell复制sudo cat /var/lib/faasd/secrets/basic-auth-password | faas-cli login -s
切换到目录:
代码语言:shell复制cd build/openfaas
打包Docker:
代码语言:shell复制nerdctl build --namespace openfaas-fn -t qdfaas:latest .
查看镜像是不是刚刚构建的:
代码语言:shell复制nerdctl --namespace openfaas-fn image ls
部署函数
执行部署命令faas-cli deploy -f qdfaas.yml,控制台会提示部署成功,还会给出URL:
代码语言:shell复制faas-cli deploy -f qdfaas.yml
此时登录管理页面,可以看到新增的函数,也可以在页面上验证功能调用是否正常
最后
如果喜欢使用OpenFaas的读者比较多的话,博主会抽时间写一篇如何利用OpenFaaS函数生成封面图的文章,感谢大家的支持!