本節說明如何從原始碼編譯、安裝和測試 NDB Operator。如果您還沒有原始碼,請參閱第 2.2 節,「取得 NDB Operator」。
若要建置和測試 NDB Operator,必須在系統上安裝下列先決條件
Golang 1.16 或更新版本,用於編譯 operator。
Docker,用於建置 NDB Operator 和其他容器映像檔。Docker 也用於執行 E2E 測試案例。
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 Cluster 的相關資訊,請參閱第 3 章,「使用 NDB Operator 部署 NDB Cluster」。docker_image
使用 Minikube 時,預設記憶體配置可能不足以執行 NDB Operator;您可以使用 minikube config set 來增加記憶體配置。若要部署 memory_limitdocs/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 測試套件開發的單元測試,以及建置於 Ginkgo/Gomega 測試架構之上的更精密的端對端 (E2E) 測試套件。
大多數單元測試都與套件放置在一起,並測試這些套件內的方法。它們有時會使用模擬的 Kubernetes 用戶端來驗證 NDB Operator 傳送的要求是否符合預期。
E2E 測試案例是整合測試的集合,這些測試會變更 NdbCluster 資源物件,並驗證由該物件控制的 NDB Cluster 組態是否會相應地變更。測試案例會使用內部開發且建置於 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-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