Chart測試
一個chart包含許多一起工作的Kubernetes資源群組件。作為chart作者,可能需要編寫一些測試來驗證chart在安裝時是否按預期工作。這些測試還有助于chart消費者了解chart應該做什麼。
我在網址
https://whmzsu.github.io/helm-doc-zh-cn/不斷更新,同時也會搬運到這裡,大家有興趣加入
https://github.com/whmzsu/helm-doc-zh-cn/的可以給我送出意見和建議。
測試在Helm chart中的templates/目錄,是一個pod定義,指定一個給定的指令來運作容器。容器應該成功退出(exit 0),測試被認為是成功的。該pod定義必須包含helm測試hook注釋之一:
helm.sh/hook: test-success
或
helm.sh/hook: test-failure
。
示例測試:
- 驗證來自values.yaml檔案的配置是否正确注入。
- 確定使用者名和密碼正常工作
- 確定不正确的使用者名和密碼不起作用
- 斷言服務已啟動并正确進行負載平衡
- 等等
可以使用該helm test 指令在release中運作Helm中的預定義測試。對于chart使用者來說,這是一種很好的方式來檢查他們釋出的chart(或應用程式)是否按預期工作。
Helm測試hook的分解
在Helm中,有兩個測試hook:
test-success
和
test-failure
.
test-success
表示測試pod應該成功完成。換句話說,容器中的容器應該exit 0.
test-failure
是一種斷言測試容器不能成功完成的方式。如果pod中的容器未exit 0,則表示成功。
示例測試
下面是一個示例mariadb chart中helm測試pod定義的示例:
mariadb/ Chart.yaml
README.md
values.yaml
charts/
templates/
templates/tests/test-mariadb-connection.yaml
在
wordpress/templates/tests/test-mariadb-connection.yaml
中:
apiVersion: v1
kind: Pod
metadata:
name: "{{ .Release.Name }}-credentials-test"
annotations: "helm.sh/hook": test-success
spec:
containers: - name: {{ .Release.Name }}-credentials-test
image: {{ .Values.image }}
env: - name: MARIADB_HOST
value: {{ template "mariadb.fullname" . }} - name: MARIADB_PORT
value: "3306" - name: WORDPRESS_DATABASE_NAME
value: {{ default "" .Values.mariadb.mariadbDatabase | quote }} - name: WORDPRESS_DATABASE_USER
value: {{ default "" .Values.mariadb.mariadbUser | quote }} - name: WORDPRESS_DATABASE_PASSWORD
valueFrom:
secretKeyRef:
name: {{ template "mariadb.fullname" . }}
key: mariadb-password
command: ["sh", "-c", "mysql --host=$MARIADB_HOST --port=$MARIADB_PORT --user=$WORDPRESS_DATABASE_USER --password=$WORDPRESS_DATABASE_PASSWORD"]
restartPolicy: Never
在release上運作測試套件的步驟
-
$ helm install mariadb
NAME: quirky-walrus LAST DEPLOYED: Mon Feb 13 13:50:43 2017 NAMESPACE: default STATUS: DEPLOYED
-
$ helm test quirky-walrus
RUNNING: quirky-walrus-credentials-test SUCCESS: quirky-walrus-credentials-test
注意
- 可以在單個yaml檔案中定義盡可能多的測試,也可以在templates/目錄中的多個yaml檔案中進行分布測試
- 提倡将測試套件嵌入到一個
目錄下,比如tests/
以便實作更多隔離<chart-name>/templates/tests/
本文轉自kubernetes中文社群-
Helm chart指南-系列(7)- chart測試