티스토리 뷰
docker & k8s/helm chart
[Helm Chart] couldn't parse image reference 문제 : float64 문제
정선생 2024. 6. 10. 19:00반응형
Helm Chart 를 통해 배포할 이미지를 구성했고, 편의를 위해 도커 이미지의 TAG 이름의 정책은 날짜를 사용했다.
그런데, TAG 가 latest 일때는 문제가 안되었는데, 20240530 과 같이 날짜로 했을때만 배포가 실패했다.
결과부터 말하면, 날짜와 같이 숫자로만 존재하는 값이 float64 타입으로 인지되어 잘못된 값이 바인딩되었던 문제였다.
원인찾기
우선 배포를 해보니 아래와 같이 오류가 나고 있었다.
이미지를 찾을수 없다는 상태였고, describe pods 를 햇 더 상세한 메시지를 찾아보니 희안하게 엉뚱한 태그값이 보였다.
helm chart 에서 아래와 같은 형식으로 이미지 태그를 values 에서 관리했고 해당 값을 확인했는데
의도한 값과 다르게 지수형 표현으로 바인딩이 되었다.
image: "PRIVATE_DOCKER_REGISTRY/myImage/sample:{{ .Values.image.tag }}"
- 의도한 값 : PRIVATE_DOCKER_REGISTRY/myImage/sample:20240530
- 실제 값 : PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07
helm chart float64 라는 검색어로 검색해보니, 몇몇 결과가 나왔고 버그라는 말이 있었다.
% kubectl get pods
NAME READY STATUS RESTARTS AGE
my-pod-8445675b55-xtb5p 0/1 InvalidImageName 0 8s
% kubectl describe pods my-pod-8445675b55-xtb5p
...생략...
Reason: Error
Message: exit status 1 (stderr: '2024-06-03 11:22:22.943 [FATA] failed to execute deploy step: installation kerberos failed: [Pending:InvalidImageName] my-pod-8445675b55-xtb5p: Failed to apply default image tag "PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07": couldn't parse image reference "PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07": invalid reference format; [Pending:InvalidImageName] my-pod-8445675b55-xtb5p: Failed to apply default image tag "PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07": couldn't parse image reference "PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07": invalid reference format; ready timeout 10m0s exceeded
')
Exit Code: 1
해결방법
가장 손쉬운 방법은 숫자만으로 구성될 경우 잘못된 값이 바인딩 되는것이니 string 타입으로 인지될 수 있도록 v20240530 과 같은 형태로 태그명을 정하는것이 가장 손쉬운 해결책 이었다.
그래서 도커 이미지의 태그명 정하는 정책에 v{날짜} 형태로 문자열 하나를 추가하는 형태로 해결했다.
% helm template --name "sample" -f values.yaml --set image.tag="20240530" . | grep "PRIVATE_DOCKER_REGISTRY/myImage/sample"
image: "PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07"
image: "PRIVATE_DOCKER_REGISTRY/myImage/sample:2.024053e+07"
% helm template --name "sample" -f values.yaml --set image.tag="v20240530" . | grep "PRIVATE_DOCKER_REGISTRY/myImage/sample"
image: "PRIVATE_DOCKER_REGISTRY/myImage/sample:v20240530"
image: "PRIVATE_DOCKER_REGISTRY/myImage/sample:v20240530"
반응형
'docker & k8s > helm chart' 카테고리의 다른 글
[Helm 2.x] ConfigMap 에 서브폴더가 있는 파일을 마운트하기 (1) | 2024.10.18 |
---|---|
[helm chart] range 하위에서 include 사용시 오류 해결 방법 : error calling include (0) | 2024.08.21 |
[Helm Chart] 문자열에서 "파일명" 혹은 "파일경로" 만 추출하기 (0) | 2024.06.21 |
[Helm Chart] 파일에 선언한 값을 dict 로 만들어 사용하기 (0) | 2024.06.20 |
[Helm Chart] 파일을 include 와 values.yaml 바인딩 같이 하기 (0) | 2024.06.11 |
댓글