圖表測試

圖表包含許多協調運作的 Kubernetes 資源及元件。作為圖表作者,您可能想要撰寫一些測試,在安裝圖表時驗證圖表是否符合預期運作。這些測試也有助於圖表使用者了解圖表的預定作用。

Helm 圖表中的測試位於 templates/ 目錄下,是一個工作定義,其中指定一個包含特定執行指令的容器。容器應成功退出(退出 0),測試才算成功。工作定義必須包含 Helm 測試掛勾註解:helm.sh/hook: test

請注意,在 Helm v3 之前,工作定義需要包含以下 Helm 測試掛勾註解之一:helm.sh/hook: test-successhelm.sh/hook: test-failurehelm.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-weighthelm.sh/hook-delete-policy 等註解可用於測試資源。