云原生应用管理:原理与实践
上QQ阅读APP看书,第一时间看更新

2.9 Chart测试

一个Chart包含很多Kubernetes资源和组件。作为一个Chart作者,你可能喜欢写一些测试用例以检验Chart在安装时的可用性和正确性。这些测试用例也能帮助其他使用者明白这个Chart的功能和目的。

Chart测试文件存放在templates/文件夹下,它被定义为一个Pod,然后在Pod内执行测试用例。当运行测试完毕后,Pod的退出码应该为0,这样就会被认为测试成功。这个Pod必须含有测试专用标签,如helm.sh/hook:test-success或者helm.sh/hook:test-failure。

我们可以通过运行helm test<release-name>检测一个release的正确性,对于Chart使用者而言,这是一个了解应用能否按照期望去工作的机会。

在Helm Chart中共有两个测试标签,test-success和test-failure。

test-success表明测试Pod必须完全成功,也就是Pod内命令的退出码为0;test-failure表明Pod必须失败,也就是Pod内命令退出码不为0,这种情况下才认为这个测试是成功的。

下面我们以Wordpress中的一个测试Pod为例,来看看Chart测试的情况。这个测试用例检测参数的正确性,同时尝试去登录mariadb数据库。


wordpress/
  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

首先安装如下Chart。


helm install stable/wordpress

NAME:   quirky-walrus
NAMESPACE: default
STATUS: DEPLOYED

然后进行测试。


helm test quirky-walrus

RUNNING: quirky-walrus-credentials-test
SUCCESS: quirky-walrus-credentials-test