OpenFaaS 简介
OpenFaaS是一个构建无服务器功能的框架,它拥有对指标的第一个类支持。任何流程都可以打包为一个功能,使你能够使用一系列web事件,而无需重复的样板化编码,让无服务器函数变得简单;
1 技术亮点
·通过UI入口和单击安装轻松使用
·为Linux或Windows的任何语言编写函数,以docker/oci图像格式编写包
·便携式——在现有的硬件或公共/私有云上运行——Kubernetes或Docker集群
·用于模板和定义函数的YAML格式的CLI
·Auto-scales随着需求的增加
2 OpenFaaS概述
监督功能
1 你可以通过添加函数看门狗 (一个小型的Golang HTTP服务)把任何一个Docker镜像变成无服务器函数。
2 函数看门狗是允许HTTP请求通过STDIN转发到目标进程的入口点。响应会从你应用写入STDOUT返回给调用者。网关
1 API网关为您的函数提供了一个外部路由,并通过Prometheus收集云的原生数据。
2 您的API网关将根据需求来扩展功能,通过更改Docker Swarm或Kubernetes API中的服务副本数。
3 UI允许您在浏览器中调用函数,并根据需要创建新的函数。CLI
Docker容器中的任何容器或流程都可以是FaaS中的一个无服务器功能。通过使用FaaS CLI,您可以部署您的函数,或者从诸如Node.js或Python这样的模板中快速创建新的函数。
3 函数 Demo
你可以通过 使用FaaS-CLI和其内置的模板创建新函数,也可以在Docker中使用Windows或Linux的二进制文件。
- Python示例(handler.py)
import requests
def handle(req):
r = requests.get(req, timeout = 1)
print(req +" => " + str(r.status_code)
)
- Node.js示例(handler.js)
"use strict"
module.exports = (callback, context) => {
callback(null, {"message": "You said: " + context})
}
OpenFaaS 部署
OpenFaaS 是一个使用 Docker 构建 Serverless 功能的框架,它拥有对指标的一级支持。任何流程都可以打包为一个函数,使你能够使用一系列 web 事件,而无需重复的样板化编码。
1 获取 OpenFaaS Charts 资源
下载 Kubernetes 的 OpenFaaS 驱动程序 faas-netes:
git clone https://github.com/openfaas/faas-netes && cd faas-netes
or 国内码云镜像:
git clone https://gitee.com/mirrors/faas-netes.git && cd faas-netes
2 创建 OpenFaaS 依赖的 namespace
kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
3 增加 OpenFaaS helm chart
helm repo add openfaas https://openfaas.github.io/faas-netes/
4 OpenFaaS 部署拉起
helm repo update \
&& helm upgrade openfaas --install openfaas/openfaas \
--namespace openfaas \
--set functionNamespace=openfaas-fn \
--set generateBasicAuth=true
5 获取 password (账号: admin)
echo $(kubectl -n openfaas get secret basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode)
// password
LnMqQfE5PVv
6 控制台登录
默认的提供 31112 端口,我们通命令 $(minikube ip) 获取内部 ip,通过 ip:31112 访问,输入账号和上面提供的密码:
Hello Function
下面开始写我们的第一个 serverless function。
1 安装 faas-cli
# 安装 faas-cli 来创建和发布一个 Function
curl -sL cli.openfaas.com | sudo sh
# mac 可以通过以下命令安装
brew install faas-cli
2 NodeJS 函数
cd /home/work/demo
faas-cli new hellofaas --lang node
整个项目结构如下:
.
├── handler.js
└── package.json
拓展阅读
无服务器(Serverless)架构的时候,到底是指什么呢?其实,无服务器架构并不是说不使用服务器了。恰恰相反,客户端-服务端模式仍然在其中发挥着重要的作用。
无服务器架构实际上指的是能够让开发者在不需要关心服务器上架、为操作系统打补丁、创建容器镜像这些工作的情况下,就能够完成编码、部署和创建应用这一整套流程的架构。
1 无服务器架构的三个重要意义
- 一些缺乏开发经验的人员现在要参与到开发工作中来了。无服务器架构能够让他们尽量只学习必要的工作内容,把更多的时间放在更具创造性的开发工作中。
- 开发者不再需要重复造轮子。运行和维护服务器、为操作系统打补丁、创建容器等这一系列工作,都可以由更专业的无服务器架构提供商来完成。
- 最现实的一点是,如果不使用无服务器架构,那么在服务器管理方面,总需要有一个作最终决策的人。当服务器发生崩溃时,或是需要在服务器上执行某些操作时,总是需要这样一个统领全局的人来作出决策。因此最佳的方案是使用无服务器架构。
2 无服务器架构应用场景
无服务器架构是个好东西。但事实上,无服务器架构并不是万能的,在使用之前还需要考虑以下这些因素:
- 成本
- 使用范围
- 时间
- 控制方式