lsj week3 lab

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
项目目录下拉取openfaasrs模板代码:

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是服务启动的入口,,因此,将hyperecho-server的业务代码放在echo/src/lib.rs,服务启动代码放在tempalte/rust-http/main/src/main.rs中,由于模板的hyper库版本其官方文档不一致,需要在caogo.toml修改依赖版本

修改一下mainDcokerfile(一直构建失败,在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 会终止对应的容器实例,从而释放资源。
1 个赞