函数即服务,一步到位!

2022-11-15 13:52:36 浏览数 (2)

无服务器(Serverless/FaaS) 的现状和未来无服务器(Serverless/FaaS) 的现状和未来

谈起构建一个云端项目,你会想到什么?复杂的服务器购买流程和配置、各种复制的环境依赖安装、Docker镜像的打包和构建,还是令人头疼的后期运维......

然而,现在随时随地都能看见一个新的项目,每个有趣的项目都会带来很多的流量,这看起来并不复杂。但是各个平台又有部分接口的不兼容,几经周折,构建好了一个平台,最终发现流量极低。如果此时再去开发其他平台,得不偿失。

如何构建一个有趣的项目,只需一次构建就能多平台调用呢,现在有请我们今天的主角,最近非常火爆的函数即服务:FaaS !

什么是函数即服务 (FaaS)?

函数即服务 (FaaS) 是一种云计算形式,可帮助开发人员更好地工作,无需他们维护应用程序基础架构。当开发人员利用FaaS时,他们使用FaaS平台为他们构建、运行和监督应用程序包。

在这一点上,您可能会认为FaaS听起来像无服务器计算 ——它确实如此。无服务器计算允许开发人员将管理数据库、API网关、存储、消息传递和其他基础设施外包给第三方提供商。FaaS 是一种无服务器计算。

不过这个无服务器是指用户在使用Faas构建应用时无需创建服务器,而服务提供商的底层依旧是服务器架构,对于用户来说只需要输入参数即可构建应用,实在是太方便了。

Lighthouse OpenFaaS

轻量应用服务器Lighthouse区别于普通云服务器,主要面向轻量级的应用场景,为用户提供开箱即用的云服务器产品。它将基础的云资源统一打包进套餐,同时为用户提供丰富的应用镜像,除了包含底层的操作系统之外,还分别封装了各个场景下必需的应用软件,为用户免去了购买普通云服务器时繁琐的应用部署、配置和初始化过程,购买即可用。

优惠链接:https://url.cn/cwrkpDAT

imgimg

OpenFaas 简介

OpenFaaS 是一款高人气的开源的 faas 框架,开发人员可以借助 OpenFaaS 将事件驱动的功能和微服务部署到 Kubernetes,而无需编写重复、枯燥的样板编码。只需将代码或现有二进制文件打包到 Docker 镜像中,以获得具有自动缩放和监控指标的高度可扩展端点(Endpoints)。

OpenFaas 特点

  • 平台无关:OpenFaas 是开源框架,可以部署在任意云平台,无需担心平台锁定的问题
  • 语言无关:任意语言编写的函数均可打包至 Docker 镜像并部署运行
  • 使用简单:内置 UI,丰富的 CLI 命令和一键安装
  • 灵活伸缩:高峰期自动扩容,空闲时自动缩容
  • 社区活跃
imgimg

函数即服务

服务器准备

想要使用自建OpenFaaS,首先你需要一台轻量应用服务器,镜像直接选择 OpenFaaS 1.0.0:

image-20221115112233962image-20221115112233962

购买完成后进入产品控制台,找到已经创建的实例,在详情页-应用管理中能够看到如下信息:

image-20221115112337455image-20221115112337455

或者你已经拥有了一台轻量应用服务器,那么只需要在重装系统时选择 OpenFaaS 1.0.0 镜像即可~

此刻,在确保服务器正常运行的情况下,便可以通过应用管理页面提供的访问地址访问OpenFaaS 1.0.0管理后台,获取密码请在控制台输入命令:

代码语言:shell复制
cat ~lighthouse/credentials.txt
image-20221115112733766image-20221115112733766
image-20221115112936763image-20221115112936763

登录之后我们可以看到官方提供了一些示例Function,点击Deploy New Function即可查看

image-20221115120321914image-20221115120321914

点击 deploy 之后等待状态 ready 之后就可以进行使用了,点击 invoke 进行调用,这个 function 是用来获取主机信息的。

image-20221115120433132image-20221115120433132

构建自己的Function

首先登录到服务器,安装OpenFaaS提供的命令行工具:

代码语言:shell复制
$ curl -sSL https://cli.openfaas.com | sudo sh
image-20221115121035053image-20221115121035053

faas-cli 基础命令

代码语言:shell复制
# 最新模板下载到本地
faas-cli template pull
# 查询 openfaas 的模板列表
faas-cli new --list
# 创建模板函数
# 执行以下命令即可创建函数,add是函数名,python是语言类型
faas-cli new qdfaas --lang python
image-20221115121521144image-20221115121521144

说明: 当前目录下,产生名为qdfaas的文件夹,以及名为qdfaas.yml的文件;

qdfaas.yml 内容如下:

image-20221115121629461image-20221115121629461

进入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 文件夹。

image-20221115123346146image-20221115123346146

在本地构建Docker镜像之前要记得先登录,博主就是一直报错,后来才发现需要登录:

代码语言:shell复制
sudo cat /var/lib/faasd/secrets/basic-auth-password | faas-cli login -s
image-20221115123937991image-20221115123937991

切换到目录:

代码语言:shell复制
cd build/openfaas

打包Docker:

代码语言:shell复制
nerdctl build --namespace openfaas-fn -t qdfaas:latest .
image-20221115124621251image-20221115124621251

查看镜像是不是刚刚构建的:

代码语言:shell复制
nerdctl --namespace openfaas-fn image ls
image-20221115124745749image-20221115124745749
部署函数

执行部署命令faas-cli deploy -f qdfaas.yml,控制台会提示部署成功,还会给出URL:

代码语言:shell复制
faas-cli deploy -f qdfaas.yml
image-20221115125626548image-20221115125626548

此时登录管理页面,可以看到新增的函数,也可以在页面上验证功能调用是否正常

image-20221115130738209image-20221115130738209

最后

如果喜欢使用OpenFaas的读者比较多的话,博主会抽时间写一篇如何利用OpenFaaS函数生成封面图的文章,感谢大家的支持!

0 人点赞