k8s docker -> containerd 변경시 기존 이미지 pull 시에 archive/tar: invalid tar header: unknown
현재 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
우리는 k8s 배포를 tekton을 통해서 이미지를 push 하는데 tekton의 buildah에서 옵션으로 --disable-compression 이런게 있다고 한다.
결국 push 할때 필요한 레이어들을 압축 하지 않고 올린다는걸로 이해했고 tekton buildah 버전을 올려서 테스트 해보니 정상으로 되었다. 기존에 쓰는 버전은 1.17 이었고
https://github.com/tektoncd/catalog/tree/main/task/buildah
저기에서 0.2를 사용하다 새롭게 0.5로 해서 yaml에 선언된 이미지를 따로 pull 해서 내부에 넣고 yaml 파일을 가져와서 새로운 tekton 파이프라인을 생성해서 새로운 buildah 1.23버전으로 빌드 배포 후 test 하니 잘 되었다.
온프레미스 폐쇄망 기준으로 k8s의 docker 제거 업그레이드는 생각보다 많은 문제가 있었다. 그들은 없을거라고 했지만...