在OpenFaaS教程中尝试最简便的方法
引起的契机
参加了第11届 Rancher Meetup Tokyo(https://rancherjp.connpass.com/event/68806/),介绍了一个名为OpenFaaS的开源FaaS平台。听说它的安装很简单,我想试试看。
参考资料:
https://speakerdeck.com/player/a594805a003d40eeb50e7b37b9e80021#
https://www.slideshare.net/ukitiyan/openfaas-on-rancher-java
OpenFaaS 是什么?
简单来说,它是一个基于Docker Swarm和K8s的开源软件,提供与Amazon Lambda+API Gateway相同的功能。
*注意,它不是在模仿功能,所以并不完全准确。
我认为,这是为了适应多云时代而设立的FaaS基础设施,因为它不会让用户陷入任何单个云服务供应商提供的托管服务中而无法自拔。
组件
可以使用Docker Swarm或者K8s来创建和管理Docker容器。
API Gateway: 接收操作的网关
Function Watchdog: 控制每个函数容器的输入输出的守护程序
Prometheus: 获取和可视化每个函数容器的指标
进行试驾
首先,我们可以尝试在Docker播放环境中实施最简单的方法。
安装OpenFaaS堆栈
执行以下步骤。简便轻松。
# docker swarm init --advertise-addr eth0 && \
git clone https://github.com/openfaas/faas && \
cd faas && \
git checkout 0.6.7 && \
./deploy_stack.sh && \
docker service ls
在中国境内进行CLI安装
$ curl -sL cli.openfaas.com | sh
CLI的帮助
$ faas-cli –help
在CLI中运行示例函数(将Markdown转换为HTML):
$ echo “# Test Drive”| faas-cli调用func_markdown
列出已注册的函数
$ faas-cli list
部署Python函数
使用CLI进行设置。
使用Python语言创建一个名为<函数名>的新函数
编写源代码
在/handler.py文件中,编写要执行的代码
def handle(req):
print(“你好!你说: ” + req)
在<函数名>.yml文件中记录执行环境
提供者:
名称:faas
网关:http://localhost:8080 # 网关的URL。如果需要,可以指定远程网关。
函数:# 在此处描述执行环境
hello-python:
lang:python # 使用哪种语言?
handler:./hello-python # 指定处理程序函数或其他代码的路径
image:hello-python # Docker镜像名称。如果使用DockerHub,请在前面附加DockerHub帐户。
构建函数
使用faas-cli命令行工具,在./hello-python.yml文件中执行构建操作。
显示图像列表
docker images | grep hello-python
在多节点集群的情况下,
将镜像推送到远程的注册表中。
如果使用Docker Hub,请在image: 后面添加Docker Hub账户名,并执行以下命令:
$ faas-cli push -f ./hello-python.yml
※ 如果使用 –parallel 参数,据说可以加快同时推送多个函数的速度。
部署
使用faas-cli命令根据./hello-python.yml文件进行部署。
查看函数列表
用curl测试
curl localhost:8080/function/hello-python -d “我是Alex”
使用CLI进行测试
echo “你好!” | faas-cli调用 hello-python
如果想要加载非标准的库,
将以下内容用中文进行释义:
在`<函数名>/requirements.txt`中进行记录
在`handler.py`中导入
进行构建和部署
记录、故障排除
部署成功了吗?
$ docker service ls
检查函数容器
docker服务ps
检查函数容器的日志
docker服务日志
* 如果日志很多,可以使用–tail选项进行确认。如果加上-f,则可以将日志流式传输到标准输出。
由于Prometheus容器已经嵌入其中,因此可以在那里进行确认。
故障排除
如果出现类似“无法连接服务”的错误,请确认以下内容:
– 如果是多节点集群,请在部署之前将镜像推送至Docker Hub或其他注册表。
– 使用docker service logs –no-trunc=true命令查看更详细的日志。
– 尝试重新部署。
我在意
目前,你会说哪些语言?
用中文原生语言转述如下:使用命令” fass-cli new –list” 可以进行确认。
-
- Node.js
-
- Python(Python 2)
-
- Python 3
-
- Ruby
-
- C#
-
- Go
- Dockerfile
Go語言的部署示例
https://blog.alexellis.io/serverless-golang-with-openfaas/
OpenFaaS可以在Windows系操作系统上运行吗?
尽管找不到明确的说明,但由于未公开安装方法等原因,恐怕在目前(2017/11/19)是不可行的。
Docker Swarm和k8s的区别
目标系统
Docker Swarm: 适用于小规模(可在物联网设备上运行)的容器集群管理系统
K8s:
适用于大规模使用的
聚类
Docker Swarm:
以自定义格式进行描述的构建方式
通过Service来进行集群化,每个容器是一个task
K8s:
使用YAML格式进行描述配置
通过deployment进行集群化
通过Pod进行多个容器分组(共享相同的磁盘卷)
命令行界面
Docker Swarm:
Docker的CLI中已经集成
docker swarm 命令
docker service 命令
直接操作主节点容器的形式
K8s:
可以使用kubectl(适用于基于Debian的操作系统)。
kubectl仅用于管理集群和部署。
集群的创建可以使用第三方工具,如kops、GKE、kubeadm等。
主机之间的网络
Docker Swarm:
默认使用覆盖网络。
此外,还可以使用macvlan进行配置,还可以使用其他供应商提供的驱动程序。
https://docs.docker.com/engine/swarm/networking/#create-an-overlay-network
K8s:
默认情况下未内置,需要使用第三方制造的工具,例如CoreOS Flannel。
API/集成
Docker Swarm是在moby项目中创建的。
K8s:
Kubernetes官方项目的Go编写的客户端已经在GitHub上可用。
规模 (guī mó)
Docker Swarm:
Docker Swarm没有明确公布上限。
已有超过2000个节点的实例运行。
目前有正在运行的项目,在3000个以上的节点上运行,并已超过目标数。
https://github.com/swarmzilla/swarm3k
在K8s中,最多可以在5000个集群节点(仅适用于v1.8版本)上使用公式计算的值。详见https://kubernetes.io/docs/admin/cluster-large/。