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
会启动相应的容器并执行。
faasd
API 网关:- 与 OpenFaaS 类似,
faasd
也提供了 API 网关,用于暴露 HTTP 接口,通过这些接口用户可以上传、调用和管理函数。 - 网关服务使用的是一个轻量级的 HTTP 服务器,通常通过一个 Docker 容器来运行。该网关负责接受外部请求,并将它们路由到对应的函数容器。
大致工作流程:
部署函数:
- 用户通过
faasd
上传自己的函数代码,faasd
会自动构建 Docker 容器并启动。每个函数都包含了其自身的代码和运行环境。触发函数: - 当有请求到达 API 网关时,
faasd
会根据请求的路径、HTTP 方法等信息来决定哪个函数需要被触发。 - 函数执行:
- 对于每个请求,
faasd
启动一个 Docker 容器实例来执行该函数,函数代码会在这个容器中运行。 - 返回结果:
- 函数执行完后,结果会返回给 API 网关,网关将结果返回给请求的客户端。
- 资源管理与清理:
- 函数执行完毕后,
faasd
会终止对应的容器实例,从而释放资源。