k8s

k8s docker -> containerd 변경시 기존 이미지 pull 시에 archive/tar: invalid tar header: unknown

초이짬 2022. 8. 18. 15:15
728x90

현재 k8s가 1.23 -> 24 upgrade 중인데 dockershim 제거 되고 cotainerd 만 사용하게 변경중에 기존 docker 를 이용해 push 된 이미지가 containerd 만으로 pull 을 할때 archive/tar: invalid tar header: unknown 이런 오류가 발생해서 pod 정상 동작이 안된다.

 

로그를 좀 확인해 보면 pod를 가져오기 위해 layer를 가져오는 과정에서 발생된 거 같았고 spring boot 로 된 pod 의 dockerfile의 from에 사용중인 jdk가 의심가서 jdk 를 노드에 개별적으로 pull 한뒤에 하니까 된다.

 

해외 이슈로 찾아본 결과 그런 다중 레이어에서 아카이빙이 tar.gz 로 올라가고 이걸 containerd 가 가져올때 압축 푸는 방법이 tar로 풀려고 하니 tar.gz를 못풀어서 그렇다고 하는것 같았다

https://github.com/containers/buildah/issues/1589

 

invalid tar header: unknown · Issue #1589 · containers/buildah

GKE cluster (1.12.7-gke.10) using the node image cos_containerd is failing to run containers built with buildah and pushed to GCR. Failed to pull image "gcr.io/gke-clusters/testing:latest"...

github.com

우리는 k8s 배포를 tekton을 통해서 이미지를 push 하는데 tekton의 buildah에서 옵션으로  --disable-compression 이런게 있다고 한다.

결국 push 할때 필요한 레이어들을 압축 하지 않고 올린다는걸로 이해했고 tekton buildah 버전을 올려서 테스트 해보니 정상으로 되었다. 기존에 쓰는 버전은 1.17 이었고

https://github.com/tektoncd/catalog/tree/main/task/buildah 

 

GitHub - tektoncd/catalog: Catalog of shared Tasks and Pipelines.

Catalog of shared Tasks and Pipelines. Contribute to tektoncd/catalog development by creating an account on GitHub.

github.com

저기에서 0.2를 사용하다 새롭게 0.5로 해서 yaml에 선언된 이미지를 따로 pull 해서 내부에 넣고 yaml 파일을 가져와서 새로운 tekton 파이프라인을 생성해서 새로운 buildah 1.23버전으로 빌드 배포 후 test 하니 잘 되었다.

 

온프레미스 폐쇄망 기준으로 k8s의 docker 제거 업그레이드는 생각보다 많은 문제가 있었다. 그들은 없을거라고 했지만...

 

 

 

 

728x90