This section describes how to compile, install, and test NDB Operator from source. If you do not already have the source code, see Section 2.2, “Obtaining NDB Operator”'.
The following prerequisites must be installed on the system to build and test NDB Operator:
Golang 1.16 or newer to compile the operator.
Docker to build the NDB Operator and other container images. Docker is also used to run the E2E testcases.
Minikube or KinD to deploy and test the NDB Operator. Kubernetes 1.19 or later is also required.
The Makefile
included with the source code
contains all targets needed to build the operator; this can done
using the command shown here:
> make build
The Custom Resource Definition and other manifest files are
regenerated by the build
target.
By default, NDB Operator is built in release mode. To build it in
debug mode for use in development instead, set the
WITH_DEBUG
environment variable to
1
when invoking the build, like this:
> WITH_DEBUG=1 make build
To generate the NDB Operator Docker image, run the command shown here:
> make operator-image
Once the image is built, it must be made accessible to the
Kubernetes Cluster. For KinD, you can use kind load
command to load
the image. For Minikube, it depends on the container runtime used;
see
Pushing
images into minikube clusters. See
Chapter 3, Deploying NDB Cluster with NDB Operator, for information about setting up NDB
Operator and deploying an NDB Cluster using the operator.
docker_image
When using Minikube, the default memory allocation might not be
adequate for running NDB Operator; you can increase it using
minikube config set
. To deploy the
example at memory_limit
docs/examples/example-ndb.yaml
,
Minikube requires at least 5GB memory; you can set this as shown
here:
> minikube config set memory 5GB
Making changes to the NdbCluster type.
If any change is made to the
NdbCluster
type in
pkg/apis/ndbcontroller/v1/types.go
, you
must renegerate the client set, informers, and listers. You can
do this by executing the following command in
pkg/generated
:
> make generate
Do not attempt to modify the NdbCluster
type
while an upgrade of NDB Operator is in progress. See
Section 2.7, “Upgrading NDB Operator”, for more information.
Testing NDB Operator. The NDB Operator project comes with unit tests that are developed using the go testing package and a more elaborate End-To-End (E2E) test suite that is built on top of the Ginkgo/Gomega testing framework.
Most of the unit tests are colocated with the packages, and test the methods within those packages. They sometimes use a simulated Kubernetes client to verify whether requests sent by NDB Operator match expectations.
The E2E testcases are a collection of integration tests that make
changes to an NdbCluster
resource object and
verify whether the NDB Cluster configuration controlled by the
object changes accordingly. The testcases use a E2E framework
developed internally and built on top of the
Ginkgo testing
framework. The tests should be run using
e2e-tests/run-e2e-test.go
;
options for this testing tool can be found in
e2e-tests/README.md
. The tests can be run
either in an existing Kubernetes cluster or a new one using KinD.
To generate the E2E testing image, run make
e2e-tests
on the command line.
To run the E2E tests in an existing Kubernetes cluster, pass the
path to the kubeconfig
file for this cluster to
the run-e2e-test.go
tool, like this:
> go run e2e-tests/run-e2e-test.go -kubeconfig=path/to/file
Both the mysql/ndb-operator
and the
e2e-tests
images must be accessible to the
Kubernetes Cluster.
The test tool can also start its own KinD cluster and then run the
E2E tests in it. A Docker instance with both the
mysql/ndb-operator
and
e2e-tests
images must be accessible from the
terminal in which the test is being run. The KinD cluster is
started inside Docker as part of this process. You can do this
running either one of the commands shown here:
> go run e2e-tests/run-e2e-test.go -use-kind
> make e2e-kind