728x90
📌
Kubernetes에서 컨테이너 런타임으로 도커를 더 이상 지원하지 않기 때문에 Containerd의 이미지를 사용해야 했다.
그러나, Containerd에서는 이미지를 직접 빌드하는 기능이 없다. 따라서 다른 방법을 사용해야 하는데 pod가 사용할 이미지의 출처로 docker private registry를 사용하는 방법이 있다.
나는 보다 간단한 테스트를 위해 Docker의 이미지를 Containerd 이미지로 변환하여 사용했다.
🥸
참고로 마스터노드가 아닌 워커노드에서 수행해야 한다. Pod가 실행되는 노드가 워커노드이기 때문이다.(이미지 참조 시 워커 노드 내 containerd 이미지를 사용하도록 함.)
또한, pod를 생성할 yaml 파일 내 직접 만든 이미지를 사용할 것이므로 imagePullPolicy: Never을 설정해 주자.
Docker 이미지 조회 후 기존 이미지 or 댕글링 있다면 삭제
$ docker images
...
<none> <none> ...
# 기존 이미지 있으면 삭제
$ docker rmi <Image ID>
- 깔끔하게 정리하고 싶다면 기존 or 댕글링 이미지를 삭제하자.
Docker Image 생성
# docker 이미지 빌드(Dockerfile 경로에서 진행해야함)
docker build -t <생성할 Image명> .
기존에 tar 파일이 있다면 삭제
# tar 파일 저장경로에서 기존 tar 파일 삭제
rm- rf <tar 파일명>.tar
- 이 과정 역시 여러 번 빌드 시 기존 tar 파일을 깔끔히 지우기 위해 넣었다.
tar 파일 생성
# 명령어를 입력하는 경로에 도커 이미지를 tar 파일로 변환하여 저장
docker save -o <생성할 tar 파일명>.tar <tar 파일로 변환할 Docker Image명>
Containerd 이미지 조회 후 기존 이미지 or 댕글링 이미지 있다면 삭제
# containerd image 조회
sudo crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/library/xxx ...
# containerd 내 이전 이미지 삭제
sudo crictl rmi <docker.io/library/<Image명>의 container id>
- 이 역시 conatinerd 내의 깔끔한 관리를 위해 미리 삭제하자.
tar 파일 -> Conatainerd 이미지로 변환
# containerd namespace 조회
sudo ctr ns list
NAME LABELS
k8s.io
...
# docker에서 추출한 tar 파일을 containerd 이미지로 변환하여 import
# tar 파일 경로에서 해야 함
sudo ctr --namespace k8s.io image import <(변환한 tar 파일명).tar>
# 이미지가 업데이트됨.
# containerd image 조회
sudo crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/library/xxx ...
- 여기서 핵심은 --namespace를 k8s.io 즉, 쿠버네티스가 사용하는 네임스페이스로 설정하여 import 해줘야 한다는 점이다.
- 이미지가 업데이트된다면 yaml 파일에는 docker.io/library/xxx와 같이 이미지명 그대로 넣어서 사용하면 된다.
참고
728x90