Тестирование чартов
Чарт содержит множество ресурсов и компонентов Kubernetes, работающих вместе. Как автор чарта, вы можете написать тесты, которые проверят, что ваш чарт работает корректно после установки. Эти тесты также помогут пользователям чарта понять, что именно должен делать ваш чарт.
Тест в Helm-чарте располагается в директории templates/ и представляет собой определение Job, указывающее контейнер с заданной командой для выполнения. Контейнер должен завершиться успешно (код выхода 0), чтобы тест считался пройденным. Определение Job должно содержать аннотацию тестового хука: helm.sh/hook: test.
Обратите внимание, что до Helm v3 определение Job должно было содержать одну из следующих аннотаций: helm.sh/hook: test-success или helm.sh/hook: test-failure. Аннотация helm.sh/hook: test-success по-прежнему принимается для обратной совместимости как альтернатива helm.sh/hook: test.
Примеры тестов:
- Проверка того, что конфигурация из файла values.yaml была правильно применена.
- Убедитесь, что имя пользователя и пароль работают корректно
- Убедитесь, что неправильные имя пользователя и пароль не работают
- Проверка того, что ваши сервисы запущены и правильно балансируют нагрузку
- и т.д.
Вы можете запустить предопределённые тесты Helm для релиза с помощью команды helm test <RELEASE_NAME>. Для пользователя чарта это отличный способ убедиться, что их релиз чарта (или приложения) работает как ожидается.
Пример теста
Команда helm create автоматически создаёт ряд папок и файлов. Чтобы попробовать функциональность helm test, сначала создайте демо-чарт.
$ helm create demo
Теперь вы увидите следующую структуру в вашем демо-чарте.
demo/
Chart.yaml
values.yaml
charts/
templates/
templates/tests/test-connection.yaml
В файле demo/templates/tests/test-connection.yaml вы найдёте тест, который можете попробовать. Ниже приведено определение тестового 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 станут активными; если вы запустите тест сразу после установки, велика вероятность временного сбоя, и вам потребуется повторить тестирование.
$ 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-файле или распределить их по нескольким yaml-файлам в директории
templates/. - Рекомендуется размещать набор тестов в поддиректории
tests/, например<chart-name>/templates/tests/, для лучшей изоляции. - Тест является хуком Helm, поэтому к тестовым ресурсам можно применять аннотации
helm.sh/hook-weightиhelm.sh/hook-delete-policy.