Skip to content

Latest commit

 

History

History
164 lines (145 loc) · 7.92 KB

development.md

File metadata and controls

164 lines (145 loc) · 7.92 KB

开发手册

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

1. 代码目录数结构

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

2. 编译

2.1 编译全部模块

$ make

2.2 为其它平台交叉编译:

$ KUN_BUILD_PLATFORMS="linux/amd64" make

2.3 只编译某一个模块:

$ make WHAT=./pkg/controller

3. 打包

用法

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

例如:打包 controller/funclet

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

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

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

例如:打包runner-runtime

$ 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

 mkdir -p /tmp/docker/config/online /tmp/docker/config/test
 export DOCKER_CONFIG_ONLINE="/tmp/docker/config/online"
 export DOCKER_CONFIG_TEST="/tmp/docker/config/test"
 
 # online
 $ docker --config $DOCKER_CONFIG_ONLINE login registry.baidubce.com -u <online-user> -p'<online-password>'
 # test
 $ docker --config $DOCKER_CONFIG_TEST login registry.baidubce.com -u <test-user> -p'<test-password>'

4 调试

4.1 环境变量

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

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

4.2 准备runtime及runner

准备runtime及runner

$ 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

# 内存不够的开发人员,可以在容器准备完毕数据后,stop掉容器
# 判定数据准备完毕:查看runtime日志,直到看到循环sleep为止
$ docker logs runner-runtime  
$ docker stop runner-runtime

4.3 启动或调试

4.3.1 调试funclet

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

$ 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即可

$ 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
$ docker exec -it mini-funclet-dev /bin/bash
$ ./funclet -v10 --logtostderr

4.3.2 调试controller

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

$ 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即可

$ 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
$ docker exec -it controller-dev sh
$ ./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