차트 테스트 (Chart Tests)
차트 테스트 (Chart Tests)
차트는 여러 쿠버네티스 리소스가 함께 동작하는 묶음이라, 설치했을 때 의도대로 돌아가는지 확인할 방법이 있으면 좋겠죠. Helm에는 차트에 테스트를 정의해 두고 릴리스에 대해 실행할 수 있는 기능이 있어요. 소비자 입장에서도 이 테스트가 차트가 무엇을 하는지 이해하는 지표가 되고요.
출처
A test in a helm chart lives under the
templates/directory and is a workload definition (commonly a Pod or Job) that specifies a container with a given command to run. 출처: https://helm.sh/docs/topics/chart_tests/
테스트가 무엇인가요
차트의 테스트는 templates/ 디렉터리 아래에 두는 워크로드 정의(Pod나 Job)예요. 컨테이너가 exit 0으로 정상 종료하면 테스트 성공으로 보는데요, 그 정의에는 반드시 Helm 테스트 훅 애노테이션이 있어야 해요.
annotations:
"helm.sh/hook": test
예를 들어 이런 검증을 테스트로 만들 수 있어요.
values.yaml의 설정이 제대로 주입됐는지 확인- 사용자 이름·비밀번호가 맞는지, 틀린 값은 거부되는지 확인
- 서비스가 떠 있고 로드밸런싱이 되는지 확인
테스트는 helm test <RELEASE_NAME>으로 실행해요. 차트 소비자가 자기 릴리스가 제대로 동작하는지 빠르게 확인하는 좋은 방법이죠.
예제로 보기
helm create demo로 데모 차트를 만들면 테스트용 파드 정의가 자동으로 들어와요.
$ helm create demo
생성된 demo/templates/tests/test-connection.yaml을 보면 준비된 테스트를 확인할 수 있어요. 그 안에는 busybox 이미지로 wget을 실행하는 Pod 정의가 있고, restartPolicy: Never로 한 번만 실행하도록 되어 있어요.
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "demo.fullname" . }}-test-connection"
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "demo.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
테스트 스위트 실행하기
먼저 차트를 설치해서 릴리스를 만들고요, 설치 직후에 바로 테스트하면 일시적인 실패(transitive failure)가 나올 수 있으니 Pod들이 활성 상태가 되기를 잠시 기다렸다가 실행하는 게 좋아요.
$ helm install demo demo --namespace default
$ helm test demo
NAME: demo
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: demo-test-connection
메모
- 테스트는 한 YAML 파일 안에 여러 개를 정의해도, 여러 파일에 나눠 담아도 돼요.
templates/tests/처럼tests/하위에 모아 격리하는 것도 환영이에요.- 테스트도 훅의 일종이라
helm.sh/hook-weight나helm.sh/hook-delete-policy같은 애노테이션을 함께 쓸 수 있어요. (Helm v3 이전에는test-success·test-failure훅이 쓰였고,test-success는 여전히 호환용으로 허용돼요.)
더 알아보기
- 공식: Chart Tests
- 공식: Chart Hooks
- 공식: helm test