本节介绍如何从源代码编译、安装和测试 NDB Operator。如果您还没有源代码,请参阅 第 2.2 节“获取 NDB Operator”。
以下先决条件必须安装在系统上才能构建和测试 NDB Operator
Golang 1.16 或更新版本,用于编译 Operator。
Docker 用于构建 NDB Operator 和其他容器镜像。Docker 也用于运行端到端测试用例。
Minikube 或 KinD 用于部署和测试 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
命令加载镜像。对于 Minikube,这取决于使用的容器运行时;请参阅 将镜像推送到 Minikube 集群。有关设置 NDB Operator 和使用 Operator 部署 NDB 集群的信息,请参阅 第 3 章“使用 NDB Operator 部署 NDB 集群”。docker_image
使用 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 testing 包开发的单元测试,以及构建在 Ginkgo/Gomega 测试框架之上的更精细的端到端 (E2E) 测试套件。
大多数单元测试与包位于同一位置,并测试这些包中的方法。它们有时会使用模拟的 Kubernetes 客户端来验证 NDB Operator 发送的请求是否符合预期。
E2E 测试用例是集成测试的集合,这些测试会对 NdbCluster
资源对象进行更改,并验证由该对象控制的 NDB 集群配置是否相应更改。测试用例使用内部开发并构建在 Ginkgo 测试框架之上的 E2E 框架。测试应使用 e2e-tests/run-e2e-test.go
运行;此测试工具的选项可以在 e2e-tests/README.md
中找到。测试可以在现有的 Kubernetes 集群中运行,也可以使用 KinD 在新的 Kubernetes 集群中运行。
要生成 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-operator
和 e2e-tests
镜像必须都可供 Kubernetes 集群访问。
测试工具还可以启动其自己的 KinD 集群,然后在其中运行 E2E 测试。包含 mysql/ndb-operator
和 e2e-tests
镜像的 Docker 实例必须可以从运行测试的终端访问。KinD 集群作为此过程的一部分在 Docker 内部启动。您可以通过运行以下任一命令来完成此操作
> go run e2e-tests/run-e2e-test.go -use-kind
> make e2e-kind