1. 首先在本机安装faasd:
git clone https://github.com/openfaas/faasd --depth=1
cd faasd
./hack/install.sh
安装好后进行初始化(这一步被坑了巨久):
sudo faasd install
如下显示:
使用图中的命令即可登录到本机faas网关,登陆后才可以进行函数部署
部署faas-cli
curl -sSL https://cli.openfaas.com | sudo -E sh
2. 代码编写:
首先创建一个项目目录faas-rs-lab
项目目录下拉取openfaas的rs模板代码:
faas-cli template pull https://github.com/openfaas-incubator/rust-http-template
然后执行:
faas-cli new --lang rust-http echo
来创建新函数echo
查看项目目录:
├── echo
├── stack.yaml
└── template
├── rust
│ ├── function
│ └── main
└── rust-http
├── function
└── main
查看stack.yaml:
version: 1.0
provider:
name: openfaas
gateway: http://127.0.0.1:8080
functions:
echo:
lang: rust-http
handler: ./echo
image: dolzhuying/echo:latest
查找资料得知,handler定义了最终部署的函数的源代码,而template/rust-http/main是服务启动的入口,,因此,将hyper的echo-server的业务代码放在echo/src/lib.rs,服务启动代码放在tempalte/rust-http/main/src/main.rs中,由于模板的hyper库版本其官方文档不一致,需要在caogo.toml修改依赖版本
修改一下main的Dcokerfile(一直构建失败,在wsy的指导下修改了基础构建镜像):
FROM rust:latest AS builder
RUN rustup target add x86_64-unknown-linux-musl
然后登录到Docker registry:
docker login -u <username>
构建、推送、部署:
DOCKER_BUILDKIT=1 faas-cli build
faas-cli push -f stack.yaml
#登陆了faas网关才可部署
faas-cli deploy -f stack.yaml
关于build之后的目录:
├── build
│ └── echo
│ ├── function
│ └── main
├── echo
├── stack.yaml
└── template
├── rust
│ ├── function
│ └── main
└── rust-http
├── function
└── main
build目录,是faas build的时候,根据stack.yaml文件里的配置,handler对应 目录,language对应template里的函数模板,把 库套进模板里,形成build/<echo>下的源文件,再使用 Dockerfile 编译成 docker image,最后 faas push stack.yaml 会将镜像推送到指定docker repo下,faas deploy 则会根据gateway设置,将配置推送到指定的faas网关,网关会从配置下的docker repo拉取指定镜像,根据函数名部署到指定的url路径下
部署后效果如下:
在build/echo/main目录下caogo run .启动服务
在windows终端对wsl服务接口测试:
在浏览器登录wsl网关:
补充一点基础知识:
faasd介绍:faasd 旨在提供一个“无 Kubernetes”版本的 OpenFaaS,主要解决的是没有 Kubernetes 环境或不希望管理 Kubernetes 集群的用户需求。它通过 Docker 来模拟和管理容器,并将 OpenFaaS 的核心功能简化和优化,使其能够在本地或低资源环境下运行,
Docker:
faasd使用 Docker 来管理和运行容器。核心组件如函数网关 (gateway)、函数处理 (faasd-provider)、Prometheus 监控等都是通过 Docker 容器来运行的。- Docker 容器管理函数执行环境,容器的生命周期由
faasd管理
faasd-provider:
faasd-provider是一个核心组件,负责提供 OpenFaaS 的函数调用和管理功能。它充当了容器的“函数提供者”,每当用户通过 API 或 CLI 调用函数时,faasd-provider会启动相应的容器并执行。
faasdAPI 网关:- 与 OpenFaaS 类似,
faasd也提供了 API 网关,用于暴露 HTTP 接口,通过这些接口用户可以上传、调用和管理函数。 - 网关服务使用的是一个轻量级的 HTTP 服务器,通常通过一个 Docker 容器来运行。该网关负责接受外部请求,并将它们路由到对应的函数容器。
大致工作流程:
部署函数:
- 用户通过
faasd上传自己的函数代码,faasd会自动构建 Docker 容器并启动。每个函数都包含了其自身的代码和运行环境。触发函数: - 当有请求到达 API 网关时,
faasd会根据请求的路径、HTTP 方法等信息来决定哪个函数需要被触发。 - 函数执行:
- 对于每个请求,
faasd启动一个 Docker 容器实例来执行该函数,函数代码会在这个容器中运行。 - 返回结果:
- 函数执行完后,结果会返回给 API 网关,网关将结果返回给请求的客户端。
- 资源管理与清理:
- 函数执行完毕后,
faasd会终止对应的容器实例,从而释放资源。