NDB Operator 9.0 手册  /  NDB Operator 安装  /  从源码构建 NDB Operator 镜像

2.5 从源码构建 NDB Operator 镜像

本节介绍如何从源码编译、安装和测试 NDB Operator。如果您还没有源码,请参阅第 2.2 节“获取 NDB Operator”

要在系统上构建和测试 NDB Operator,必须安装以下先决条件

Golang 1.16 或更新版本,用于编译 Operator。

Docker,用于构建 NDB Operator 和其他容器镜像。Docker 还用于运行端到端测试用例。

MinikubeKinD,用于部署和测试 NDB Operator。还需要 Kubernetes 1.19 或更高版本。

源码附带的 Makefile 文件包含构建 Operator 所需的所有目标;可以使用以下命令完成此操作

> make build

自定义资源定义和其他清单文件由 build 目标重新生成。

默认情况下,NDB Operator 以发布模式构建。要以调试模式构建它以用于开发,请在调用构建时将 WITH_DEBUG 环境变量设置为 1,如下所示

> WITH_DEBUG=1 make build

要生成 NDB Operator Docker 镜像,请运行以下命令

> make operator-image

构建镜像后,必须使 Kubernetes 集群可以访问它。对于 KinD,可以使用 kind load docker_image 命令加载镜像。对于 Minikube,这取决于使用的容器运行时;请参阅 将镜像推送到 minikube 集群。有关设置 NDB Operator 和使用 Operator 部署 NDB 集群的信息,请参阅第 3 章“使用 NDB Operator 部署 NDB 集群”

使用 Minikube 时,默认内存分配可能不足以运行 NDB Operator;您可以使用 minikube config set memory_limit 增加它。要部署 docs/examples/example-ndb.yaml 中的示例,Minikube 至少需要 5GB 内存;您可以按如下所示设置

> minikube config set memory 5GB

对 NdbCluster 类型进行更改。 如果对 pkg/apis/ndbcontroller/v1/types.go 中的NdbCluster 类型进行了任何更改,则必须重新生成客户端集、信息提供程序和列表器。您可以通过在 pkg/generated 中执行以下命令来完成此操作

> make generate
警告

请勿在 NDB Operator 升级过程中尝试修改 NdbCluster 类型。有关更多信息,请参阅第 2.7 节“升级 NDB Operator”

测试 NDB Operator。 NDB Operator 项目附带使用 go 测试包开发的单元测试,以及更精细的端到端 (E2E) 测试套件,该套件构建在 Ginkgo/Gomega 测试框架之上。

大多数单元测试与包位于同一位置,并测试这些包中的方法。它们有时使用模拟的 Kubernetes 客户端来验证 NDB Operator 发送的请求是否与预期相符。

E2E 测试用例是一组集成测试,它们对 NdbCluster 资源对象进行更改,并验证由该对象控制的 NDB 集群配置是否相应更改。测试用例使用内部开发并构建在 Ginkgo 测试框架之上的 E2E 框架。测试应使用 e2e-tests/run-e2e-test.go 运行;此测试工具的选项可在 e2e-tests/README.md 中找到。测试可以在现有 Kubernetes 集群中运行,也可以使用 KinD 在新集群中运行。

要生成 E2E 测试镜像,请在命令行上运行 make e2e-tests

要在现有 Kubernetes 集群中运行 E2E 测试,请将此集群的 kubeconfig 文件的路径传递给 run-e2e-test.go 工具,如下所示

> go run e2e-tests/run-e2e-test.go -kubeconfig=path/to/file

mysql/ndb-operatore2e-tests 镜像必须都可供 Kubernetes 集群访问。

测试工具还可以启动自己的 KinD 集群,然后在其中运行 E2E 测试。运行测试的终端必须可以访问包含 mysql/ndb-operatore2e-tests 镜像的 Docker 实例。KinD 集群作为此过程的一部分在 Docker 内部启动。您可以通过运行以下任一命令来完成此操作

> go run e2e-tests/run-e2e-test.go -use-kind

> make e2e-kind