차트 테스트
차트 테스트
차트는 함께 동작하는 여러 Kubernetes 리소스와 컴포넌트를 담아요. 차트 작성자라면 설치했을 때 차트가 예상대로 동작하는지 검증하는 테스트를 작성하고 싶을 거예요. 이런 테스트는 차트 사용자가 차트가 무엇을 하기 위한 것인지 이해하는 데도 도움이 돼요.
Helm 차트의 테스트는 templates/ 디렉터리 아래에 있으며, 주어진 명령을 실행할 컨테이너를 지정하는 워크로드 정의(흔히 Pod나 Job)예요. 테스트가 성공하려면 컨테이너가 성공적으로 종료(exit 0)해야 해요. 정의에는 helm 테스트 훅 어노테이션 helm.sh/hook: test가 반드시 들어 있어야 해요.
Helm v3까지는 작업 정의에 helm.sh/hook: test-success 또는 helm.sh/hook: test-failure 중 하나의 helm 테스트 훅 어노테이션이 필요했어요. helm.sh/hook: test-success는 helm.sh/hook: test의 하위 호환 대안으로 여전히 허용돼요.
예제 테스트:
-
values.yaml 파일의 설정이 제대로 주입됐는지 검증해요.
-
사용자 이름과 비밀번호가 올바르게 동작하는지 확인해요.
-
잘못된 사용자 이름과 비밀번호가 동작하지 않는지 확인해요.
-
서비스가 떠 있고 올바르게 로드 밸런싱하는지 확인해요.
-
등등.
helm test <RELEASE_NAME> 명령으로 Helm 릴리스에서 정의된 테스트를 실행할 수 있어요. 차트 사용자에게는 차트(또는 애플리케이션) 릴리스가 예상대로 동작하는지 확인하는 아주 좋은 방법이에요.
출처: 문서
본문
예제 테스트
helm create 명령은 여러 폴더와 파일을 자동으로 만들어 줘요. helm test 기능을 시험하려면 먼저 데모 helm 차트를 만들어요.
$ helm create demo
이제 데모 helm 차트에서 다음 구조를 볼 수 있어요.
demo/
Chart.yaml
values.yaml
charts/
templates/
templates/tests/test-connection.yaml
demo/templates/tests/test-connection.yaml에서 시도해 볼 수 있는 테스트를 볼 수 있어요. helm 테스트 포드 정의를 볼 수 있어요:
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
릴리스에서 테스트 스위트 실행 단계
먼저 클러스터에 차트를 설치해 릴리스를 만들어요. 모든 포드가 활성화될 때까지 기다려야 할 수도 있어요. 설치 직후에 테스트하면 일시적 실패(transitive failure)가 나올 가능성이 높으니 다시 테스트하고 싶을 거예요.
$ 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 파일에 나눠 정의할 수 있어요. -
더 격리하려면
<chart-name>/templates/tests/처럼tests/디렉터리 아래에 테스트 스위트를 중첩해도 돼요. -
테스트는 Helm 훅이므로
helm.sh/hook-weight나helm.sh/hook-delete-policy같은 어노테이션을 테스트 리소스에 사용할 수 있어요.