开发手册

基于Linux(内核4.0+)、提前安装docker,再进行下面步骤:

1. 代码目录数结构

  1. ├── Makefile # Makefile
  2. ├── README.md # ReadMe文档
  3. ├── build # 构建脚本目录
  4. ├── common.sh # 构建项目的全局变量设置
  5. ├── lib
  6. ├── golang.sh # 项目编译的基础设置脚本,如编译平台等
  7. ├── init.sh # 编译构建脚本的初始化设置,如导入其他构建lib
  8. ├── logging.sh # 编译构建脚本的日志功能,如错误日志等
  9. ├── util.sh # 编译构建脚本的工具函数,如获取本机arch等
  10. └── version.sh # 二进制的版本管理lib
  11. ├── make-clean.sh # 清理构建产出
  12. └── make-rules
  13. ├── build.sh # 编译构建各组件二进制
  14. └── test.sh # 运行项目单测及汇报覆盖率
  15. ├── build.sh # 构建脚本
  16. ├── cmd # 所有模块入口
  17. ├── controller # controller组件
  18. ├── funclet # funclet组件
  19. ├── httptrigger # http触发器组件
  20. └── stubs # local-registry stub组件
  21. ├── docs # 文档目录
  22. ├── func-registry.md # stubs生成func-registry文档
  23. ├── development.md # 本地开发文档
  24. ├── getting-started.md # 使用docker-compose快速体验easyfaas服务文档
  25. └── test.md # 测试文档
  26. ├── go.mod
  27. ├── go.sum
  28. ├── pkg
  29. ├── api # 各模块API结构体及常量包
  30. ├── auth # 鉴权包,目前支持百度云鉴权\不鉴权两种方式,注册自定义鉴权方式
  31. ├── brn # brn包,提供对资源brn的解析
  32. ├── controller # controller组件:实现了用户流量调度以及容器池状态管理等功能
  33. ├── error # error包:定义通用easyfaas服务通用error
  34. ├── funclet # funclet组件:实现用户工作容器的管理
  35. ├── httptrigger # httptrigger组件:支持http请求触发函数调用
  36. ├── repository # 函数代码存储组件,可注册自定义代码存储服务
  37. ├── rest # rest包:rest http client 服务,用于发起http请求
  38. ├── server # http server包:包含server的配置,过滤,hook等功能
  39. ├── stubs # local-registry stub组件:提供本地函数代码存储服务
  40. ├── userlog # 用户日志:用户函数日志的格式化及收集,支持plain和json格式
  41. ├── util # util包:包含本地缓存/挂载/文件等工具函数
  42. └── version # version包:用于获取组件二进制的版本
  43. └── scripts # 工具脚本
  44. ├── build-image.sh # 镜像制作脚本
  45. ├── controller # 制作controller镜像时所需文件
  46. ├── funclet # 制作funclet镜像时所需文件
  47. ├── runner-runtime # 制作runner-runtine镜像时所需文件
  48. └── stubs # 制作local-registry stubs 镜像时所需文件
  49. └── docker-compose # 快速上手使用docker-compose跑easyfaas服务所需脚本

2. 编译

2.1 编译全部模块

  1. $ make

2.2 为其它平台交叉编译:

  1. $ KUN_BUILD_PLATFORMS="linux/amd64" make

2.3 只编译某一个模块:

  1. $ make WHAT=./pkg/controller

3. 打包

用法

  1. $ scripts/build-image.sh -h
  2. Usage: scripts/build-image.sh [OPTIONS]
  3. -h --help 帮助
  4. -m= --module= 模块名称
  5. -i= --image= 镜像名称
  6. -t= --tag= 镜像标签
  7. -e= --env= 部署环境(镜像仓库配置)

例如:打包 controller/funclet

  1. $ scripts/build-image.sh -e=test -m=funclet -i=mini-funclet -t=dev

如果需要容器build项目,可以使用WITHBUILD环境变量控制

  1. $ WITHBUILD=1 scripts/build-image.sh -e=test -m=funclet -i=mini-funclet -t=dev

例如:打包runner-runtime

  1. $ sudo WITHNODEJS8=1 WITHNODEJS10=1 WITHNODEJS12=1 WITHPYTHON2=1 WITHPYTHON3=1 WITHJAVA8=1 bash scripts/runner-runtime/build.sh image:tag runnertag

您也可以提前配置不同的部署环境镜像仓库 eg: 线上环境的配置目录 ~/zhangsan/docker/config/online 测试环境的配置目录 ~/zhangsan/docker/config/test

  1. mkdir -p /tmp/docker/config/online /tmp/docker/config/test
  2. export DOCKER_CONFIG_ONLINE="/tmp/docker/config/online"
  3. export DOCKER_CONFIG_TEST="/tmp/docker/config/test"
  4. # online
  5. $ docker --config $DOCKER_CONFIG_ONLINE login registry.baidubce.com -u <online-user> -p'<online-password>'
  6. # test
  7. $ docker --config $DOCKER_CONFIG_TEST login registry.baidubce.com -u <test-user> -p'<test-password>'

4 调试

4.1 环境变量

在宿主机上准备faas的数据目录${faasPath},eg: /home/faas

  1. export faasPath=/home/faas
  2. # 本地bin包目录
  3. export faasDevBin=/home/xflying/controller/code

4.2 准备runtime及runner

准备runtime及runner

  1. $ docker run -t -d --name runner-runtime -v ${faasPath}/runtime:/var/faas/runtime -v ${faasPath}/runner:/var/faas/runner registry.baidubce.com/easyfaas-public/runner-runtime:ba91af
  2. # 内存不够的开发人员,可以在容器准备完毕数据后,stop掉容器
  3. # 判定数据准备完毕:查看runtime日志,直到看到循环sleep为止
  4. $ docker logs runner-runtime
  5. $ docker stop runner-runtime

4.3 启动或调试

4.3.1 调试funclet

若不需要更改funclet,并只想以默认参数启动funclet,则

  1. $ docker run -t -d --privileged -v ${faasPath}:/var/faas -v ${faasPath}/invoker/run:/var/run/faas --name mini-funclet registry.baidubce.com/easyfaas-public/mini-funclet:907546

若需要更改funclet,则以bash作为init命令即可,随后进入容器进行调试 ps : 可将自己的代码mount进容器,此处更换掉/home/fly/funclet即可

  1. $ docker run -t -d --privileged -v ${faasDevBin}:/home/code -v ${faasPath}:/var/faas -v ${faasPath}/invoker/run:/var/run/faas --name mini-funclet-dev registry.baidubce.com/easyfaas-public/mini-funclet:82b366 /bin/bash
  2. $ docker exec -it mini-funclet-dev /bin/bash
  3. $ ./funclet -v10 --logtostderr

4.3.2 调试controller

若不需要更改controller,并只想以默认参数启动controller,则

  1. $ docker run -t -d -v ${faasPath}/invoker/run:/var/run/faas --name controller regisry.baidubce.com/easyfaas-public/controller:28a179

若需要更改controller,则以sh作为init命令即可,随后进入容器进行调试 ps : 可将自己的代码mount进容器,此处更换掉/home/fly/controller即可

  1. $ docker run -t -d -v ${faasDevBin}:/home/code -v ${faasPath}/invoker/run:/var/run/faas --name controller-dev registry.baidubce.com/easyfaas-public/controller:28a179 sh
  2. $ docker exec -it controller-dev sh
  3. $ ./controller --port=8001 --logtostderr --repository-endpoint=http://cfc.bj.baidubce.com --repository-version="v1/ote" --repository-auth-type="bce" --repository-auth-params="{\"ak\":\"1e5abd9730754bcfb6aab8e3f1c3e6c7\", \"sk\": \"1a8d187b96f04699af506afd7e8a9048\"}" --enable-metrics -v10