Chart Test

  chart包含了很多一起工作的Kubernetes资源和组件。作为一个chart作者,你可能想写一些测试验证chart安装时是否按照预期工作。 这些测试同时可以帮助chart用户理解你的chart在做什么。

test 在helm chart中放在 templates/目录,并且是一个指定了容器和给定命令的任务。如果测试通过,容器应该成功退出 (exit 0) 任务的定义必须包含helm测试钩子的注释:helm.sh/hook: test

注意Helm v3中,任务定义需要包含helm的测试钩子注释之一:helm.sh/hook: test-success 或者 helm.sh/hook: test-failurehelm.sh/hook: test-success 仍然向后兼容,也可以是 helm.sh/hook: test

示例测试以下内容:

  • 验证你values.yaml文件中的配置可以正确注入。
    • 确保你的用户名和密码是对的
    • 确保不正确的用户名和密码不会工作
  • 判断你的服务只启动的并且正确地负载均衡
  • 等等。

你可以在Helm的一个版本中运行预定义的测试,执行 helm test <RELEASE_NAME>。对于chart用户来说, 这是验证chart发布(或应用)可以正常运行的很好的方式。

Example Test

这是一个helm对 bitnami wordpress chart的pod定义的测试。 如果你下载了一个chart的拷贝,可以在本地看到以下文件:

  1. $ helm repo add bitnami https://charts.bitnami.com/bitnami
  2. $ helm pull bitnami/wordpress --untar
  1. wordpress/
  2. Chart.yaml
  3. README.md
  4. values.yaml
  5. charts/
  6. templates/
  7. templates/tests/test-mariadb-connection.yaml

wordpress/templates/tests/test-mariadb-connection.yaml中,会看到一个test,可以试试:

  1. {{- if .Values.mariadb.enabled }}
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: "{{ .Release.Name }}-credentials-test"
  6. annotations:
  7. "helm.sh/hook": test
  8. spec:
  9. containers:
  10. - name: {{ .Release.Name }}-credentials-test
  11. image: {{ template "wordpress.image" . }}
  12. imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
  13. {{- if .Values.securityContext.enabled }}
  14. securityContext:
  15. runAsUser: {{ .Values.securityContext.runAsUser }}
  16. {{- end }}
  17. env:
  18. - name: MARIADB_HOST
  19. value: {{ template "mariadb.fullname" . }}
  20. - name: MARIADB_PORT
  21. value: "3306"
  22. - name: WORDPRESS_DATABASE_NAME
  23. value: {{ default "" .Values.mariadb.db.name | quote }}
  24. - name: WORDPRESS_DATABASE_USER
  25. value: {{ default "" .Values.mariadb.db.user | quote }}
  26. - name: WORDPRESS_DATABASE_PASSWORD
  27. valueFrom:
  28. secretKeyRef:
  29. name: {{ template "mariadb.fullname" . }}
  30. key: mariadb-password
  31. command:
  32. - /bin/bash
  33. - -ec
  34. - |
  35. mysql --host=$MARIADB_HOST --port=$MARIADB_PORT --user=$WORDPRESS_DATABASE_USER --password=$WORDPRESS_DATABASE_PASSWORD
  36. restartPolicy: Never
  37. {{- end }}

运行一个发布版本测试套件的步骤

首先,安装chart到你的集群中创建一个版本。需要等待所有的pod变成active的状态;如果安装之后立即执行test, 可能会出现相应的失败,你不得不再执行一次test。

  1. $ helm install quirky-walrus wordpress --namespace default
  2. $ helm test quirky-walrus
  3. Pod quirky-walrus-credentials-test pending
  4. Pod quirky-walrus-credentials-test pending
  5. Pod quirky-walrus-credentials-test pending
  6. Pod quirky-walrus-credentials-test succeeded
  7. Pod quirky-walrus-mariadb-test-dqas5 pending
  8. Pod quirky-walrus-mariadb-test-dqas5 pending
  9. Pod quirky-walrus-mariadb-test-dqas5 pending
  10. Pod quirky-walrus-mariadb-test-dqas5 pending
  11. Pod quirky-walrus-mariadb-test-dqas5 succeeded
  12. NAME: quirky-walrus
  13. LAST DEPLOYED: Mon Jun 22 17:24:31 2020
  14. NAMESPACE: default
  15. STATUS: deployed
  16. REVISION: 1
  17. TEST SUITE: quirky-walrus-mariadb-test-dqas5
  18. Last Started: Mon Jun 22 17:27:19 2020
  19. Last Completed: Mon Jun 22 17:27:21 2020
  20. Phase: Succeeded
  21. TEST SUITE: quirky-walrus-credentials-test
  22. Last Started: Mon Jun 22 17:27:17 2020
  23. Last Completed: Mon Jun 22 17:27:19 2020
  24. Phase: Succeeded
  25. [...]

注意

  • 你可以在单个yaml文件中定义尽可能多的测试或者分布在templates/目录中的多个yaml文件中。
  • 为了更好地隔离,欢迎你将测试套件嵌套放在tests/目录中,类似<chart-name>/templates/tests/
  • 一个test就是一个 Helm 钩子,所以类似于 helm.sh/hook-weighthelm.sh/hook-delete-policy的注释可以用于测试资源。