Serverless实战-OpenFaaS


前言

什么是Serverless

Serverless字面意思是无服务。但是它不代表再也不需要服务器了,而是说:开发者再也不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署,你甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地开发软件。

在无服务器模型中,云提供商负责运行物理服务器并代表用户动态分配资源,用户则可以直接将代码部署到生产环境中。

无服务器计算产品通常分为两类,分别是后端即服务(BaaS)和 功能即服务(FaaS)。

  • BaaS: 管理某个具体的端口。开发人员通过访问各种各样的第三方服务和应用。例如,云提供商可以提供认证服务、额外加密、云访问数据库以及高置信度使用数据。
  • FaaS: 管理某个具体的功能。开发人员通过将自己实现的某个功能通过函数的形式发布到云提供商提供的服务上,通过调用具体的函数来实现功能。

在大多数情况下,当开发人员提到无服务器时,他们所指的基本是 FaaS 模型。在 FaaS 下,开发人员仍然要编写自定义服务器端逻辑,但它可以在完全由云服务提供商管理的容器中运行。

什么是FaaS

“功能即服务”(或称为 FaaS)是一种云计算服务,它允许开发人员以功能的形式来构建、计算、运行和管理这些应用包,无需维护自己的基础架构。

FaaS 是一种在无状态容器中运行的事件驱动型执行模型,这些功能将利用 FaaS 提供商的服务来管理服务器端逻辑和状态。

FaaS 解决方案可通过主流公共云提供,并可在内部置备,这样就为企业 IT 应用开发新增了一些重要的功能。获取云原生策略指南,为借助 FaaS 实施无服务器方案做好准备。

以下是 FaaS 的一些常见示例:

  • IBM 云功能
  • Amazon 的 AWS Lambda
  • Google 云功能
  • Microsoft Azure 功能(开源)
  • OpenFaaS(开源)

什么是OpenFaaS

OpenFaaS一款高人气的开源的faas框架,可以直接在Kubernetes上运行,也可以基于Swarm或容器运行。

在Kubernetes上部署OpenFaaS十分简单,用到的镜像如下:

  • functions/faas-netesd:0.3.4
  • functions/gateway:0.6.14
  • functions/prometheus:latest-k8s
  • functions/alertmanager:latest-k8s

这些镜像都存储在DockerHub上。

下面就开始介绍在k8s上运行OpenFaas

前提

安装k8s。如果你没有安装,可参考我的另外一篇文章kubernetes(一)搭建简单实例,只需简单的几个步骤,就可以在本地安装k8s。

还需要对k8s的简单几个命令有一些了解,可参考kubernetes(二)常用命令,都比较简单,就当做是学习一下k8s。

搭建OpenFaaS

安装faas-cli

brew install faas-cli

OpenFaaS提供了命令行工具faas-cli,使用该工具可以管理OpenFaaS中的函数。

安装helm

brew install kubernetes-helm

Helm 是一个 Kubernetes 应用的包管理工具,用来管理 chart——预先配置好的安装包资源,有点类似于 Ubuntu 的 APT 和 CentOS 中的 YUM

启动k8s cluster

minikube start

为OpenFaas核心组件和函数创建一个namespace

kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml

将openfaas加到k8s包管理中

helm repo add openfaas https://openfaas.github.io/faas-netes

升级k8s包

helm repo update

生成一个随机密码

export PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1)

为OpenFaas创建一个密码

kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"

使用helm安装openfaas

helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set basic_auth=true

设置openfaas的入口地址

export OPENFAAS_URL=ip:port

如何查看ip:port?在.kube/config文件中clusters/cluster/server中有

等k8s中的pod都启动成功后,使用faas-cli登录

upload successful

echo -n $PASSWORD | faas-cli login -g https://$OPENFAAS_URL -u admin —-password-stdin

遇到的问题

安装过程中遇到不少问题,解决之后就不好复现了。一些问题的解决方法在参考文件中可以找到,如果你有其他的什么问题,可以评论或者联系我,一起探讨。

使用faas-cli写一个简单的示例

至此OpenFaas在k8s中安装完成,下面利用OpenFaaS提供的faas-cli工具,写一个简单的函数并发布

查看OpenFaas中已有函数

faas-cli list

创建一个node函数

faas-cli new callme --lang node

结果如下

[root@localhost dev_node]# ll
total 12
drwx------  2 root root 4096 May  9 17:39 callme
-rw-------  1 root root  157 May  9 17:39 callme.yml
drwxr-xr-x 18 root root 4096 May  9 17:39 template
[root@localhost dev_node]#

编辑callme.yml文件

将callme.yml文件中的image字段修改成你私有的docker 镜像仓库存放。

注意,这里需要你提前在 https://www.docker.com/平台注册一个账号,存放自己的镜像文件

$ cat callme.yml 
version: 1.0
provider:
  name: openfaas
  gateway: http://127.0.0.1:8080
functions:
  callyou:
    lang: node
    handler: ./callyou
    image: yourdockername/callyou:latest

构建函数

faas-cli build -f callme.yml

推送代码

$ faas-cli push -f callme.yml 
Pushing: callme to remote repository. 
The push refers to a repository [docker.io/alexellis/callme] 
...

此时你的代码将会被推到hub.docker中

部署代码

$ faas-cli deploy -f callme.yml 
Deploying: callme. 
No existing service to remove 
Deployed. 200 OK 
URL: http://localhost:8080/function/callme

调用代码

$ faas-cli invoke -f callme.yml callme 
Reading from STDIN - hit (Control + D) to stop. 
This is my message 

{"status":"done"}

查看代码

faas-cli list

删除代码

faas-cli rm -f callme.yml

结束语

这篇文章参考内容比较多,安装过程中出现不少问题,如果你感兴趣一定要实际操作一遍,才能理解OpenFaaS具体是怎么运行的。详细的实现细节还需要自己去查阅更多资料,做好笔记。

参考

[1]Getting started with OpenFaaS on minikube

[2]什么是Serverless无服务器架构?

[3]什么是无服务器?

[4]什么是功能即服务(FaaS)

[5]OpenFaaS快速入门指南

[6]kubernetes(一)搭建简单实例

[7]kubernetes(二)常用命令

[8]https://github.com/openfaas/faas

[9]使用Helm管理kubernetes应用

[10]minikube Certificates

[11]第一篇章、OpenFaas 部署及Helloworld开发

[12]https://github.com/openfaas/faas-cli

[13]OpenFaaS 入门openfaas cli 配置与使用

[14]Morning coffee with the OpenFaaS CLI


文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
  目录