本地构建和测试

    1. yurthub
    2. yurt-controller-manager
    3. yurt-tunnel-agent
    4. yurtctl
    5. yurtadm
    6. yurt-node-servant

    本文主要介绍了在完成对上述组件的开发后,如何进行编译源码、打包镜像、运行组件和测试验证等工作。

    OpenYurt的Makefile中提供了make build命令,通过该命令可以完成对各个组件的编译。下面以编译yurtadm为例,解释make build的使用方法,其他组件类似。

    该命令会根据本机的操作系统和架构编译yurtadm,并把编译出来的可执行二进制文件放在_output目录下。

    make docker-build是最便捷的镜像构建命令,包括编译和打包镜像等步骤,可以覆盖绝大多数场景。其使用方式如下:

    1. make docker-build TARGET_PLATFORMS="${TARGET_PLATFORMS}" REGION="${your_region}"

    TARGET_PLATFORMS: 表示组件运行的目标架构,目前支持linux/amd64, linux/arm和linux/arm64三种架构。

    REGION: 参数影响编译时选用的GOPROXY,中国国内的用户建议设置REGION=cn来保证构建过程正确进行(cn表示使用GOPROXY=https://goproxy.cn)。

    1. make docker-build TARGET_PLATFORMS=linux/amd64 REGION=cn

    命令执行完成后在本地生成OpenYurt各个组件的镜像,可以通过docker images查看。

    Mac

    通过该命令可以实现在mac环境中编译能在特定平台上运行的yurtadm,这里最好加上来避免一些兼容上的问题。通过这个命令可以在Mac上编译不同平台的yurtadm.

    Windows

    由于在Windows上通常没有make命令(如果你没有用Cygwin的话),需要自己执行go build,powershell中执行方法如下(以管理员权限运行):

    1. 设置环境变量
      在运行前需要设置环境变量target_ostarget_arch,设为需要的操作系统和架构。
    1. $Env:GOOS = $Env:target_os
    2. $Env:GOARCH = $Env:target_arch
    3. $Env:CGO_ENABLED = 0
    4. $Env:GOLDFLAGS = "-s -w
    5. -X github.com/openyurtio/openyurt/pkg/projectinfo.projectPrefix=yurt
    6. -X github.com/openyurtio/openyurt/pkg/projectinfo.gitVersion=$(git describe --abbrev=0)
    7. -X github.com/openyurtio/openyurt/pkg/projectinfo.buildDate=$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
    1. 使用go build进行编译
      运行go build命令进行编译,这里需要加上-ldflags=$Env:GOLDFLAGS选项,还可以通过-o来调整编译好的yurtadm的保存位置。
    1. go build -ldflags=$Env:GOLDFLAGS cmd/yurtadm/yurtadm.go

    OpenYurt中提供的测试包括单元测试和e2e测试两种。

    单元测试会执行cmd和pkg目录下的*_test.go文件,通过以下命令即可完成

    本节将介绍如何运行OpenYurt的e2e test。在社区提供的测试用例中,节点的自治(autonomy)测试仍然处于开发阶段。

    在搭建好OpenYurt集群后可以通过以下命令运行e2e目录下的测试用例对集群进行e2e测试:

    1. make e2e-tests

    该命令会在_output目录的相应平台目录下生成e2e测试工具yurt-e2e-test,并利用KUBECONFIG环境变量(默认值为$HOME/.kube/config)指明的kubeconfig文件访问集群,运行测试。可以在stdout中看到如下测试结果:

    1. Ran 5 of 5 Specs in 82.279 seconds
    2. SUCCESS! -- 5 Passed | 0 Failed | 0 Pending | 0 Skipped
    3. PASS

    如果你需要指定测试工具yurt-e2e-test的行为(如运行额外的自治测试),可以按照下一节的步骤进行。

    1. 编译时出现”go: github.com…unknown revision xxx”
      通常是git的版本过低造成的,可以尝试升级git版本。

    2. 编译时出现”unsupported GOOS/GOARCH pair xxx/xxx”
      go不能支持所有的GOOS/GOARCH组合,如go1.17.3不支持windows/arm64。可以通过go tool dist list来查看支持的GOOS/GOARCH组合。

    3. 运行交叉编译的可执行二进制文件时出现”cannot execute binary file: Exec format error”
      通常是没有成功完成交叉编译,导致运行平台与当前平台不同,无法识别文件格式。在Windows上进行交叉编译尤其需要注意开启管理员权限。