圖表測試
圖表包含許多協調運作的 Kubernetes 資源及元件。作為圖表作者,您可能想要撰寫一些測試,在安裝圖表時驗證圖表是否符合預期運作。這些測試也有助於圖表使用者了解圖表的預定作用。
Helm 圖表中的測試位於 templates/
目錄下,是一個工作定義,其中指定一個包含特定執行指令的容器。容器應成功退出(退出 0),測試才算成功。工作定義必須包含 Helm 測試掛勾註解:helm.sh/hook: test
。
請注意,在 Helm v3 之前,工作定義需要包含以下 Helm 測試掛勾註解之一:helm.sh/hook: test-success
或 helm.sh/hook: test-failure
。helm.sh/hook: test-success
仍作為 helm.sh/hook: test
的相容性替代品。
測試範例
- 驗證是否已正確插入 values.yaml 檔案中的組態。
- 確保您的使用者名稱和密碼正常運作
- 確保不正確的使用者名稱和密碼無法運作
- 聲明服務已啟動並正確地負載平衡
- 等等
您可以在發行時使用 helm test <RELEASE_NAME>
指令執行 Helm 中的預先定義測試。對於圖表使用者來說,這是檢查圖表(或應用程式)的發行是否符合預期運作的絕佳方法。
測試範例
helm create 指令會自動建立多個資料夾和檔案。若要嘗試 helm 測試功能,請先建立示範 helm 圖表。
$ helm create demo
現在您可以在示範 helm 圖表中看到下列結構。
demo/
Chart.yaml
values.yaml
charts/
templates/
templates/tests/test-connection.yaml
在 demo/templates/tests/test-connection.yaml
中,您會看到您可以嘗試的測試。可以在此處查看 helm 測試 pod 定義
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "demo.fullname" . }}-test-connection"
labels:
{{- include "demo.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "demo.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
在發行版上執行測試套件的步驟
首先,在您的叢集上安裝圖表以建立發行版。您可能需要等待所有 pod 都變為 active;如果您在此安裝後立即測試,可能會出現非遞移性故障,而且您會想要重新測試。
$ helm install demo demo --namespace default
$ helm test demo
NAME: demo
LAST DEPLOYED: Mon Feb 14 20:03:16 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: demo-test-connection
Last Started: Mon Feb 14 20:35:19 2022
Last Completed: Mon Feb 14 20:35:23 2022
Phase: Succeeded
[...]
筆記
- 您可以在單一 yaml 檔中定義任意數量的測試,或分佈在
templates/
目錄的多個 yaml 檔中。 - 歡迎您將測試套件巢狀置於
tests/
目錄下,例如<chart-name>/templates/tests/
,以獲得更佳隔離。 - 測試是一種 Helm 鉤子,因此
helm.sh/hook-weight
和helm.sh/hook-delete-policy
等註解可用於測試資源。