모든 강의 이미지 출처는 [인프런] 쿠버네티스 어나더 클래스(지상편) - Spring 1,2 입니다.
운영 정책
CI/CD Tool
CI Tool
CD Tool
CI/CD Tool 모두 회사의 보안정책이나, 상황에 따라 온라인/오프라인에 적합한 도구를 선택해야 한다. 또한, 레퍼런스가 많고 유지보수가 편한 기술을 선택하는 것이 좋다.
Too May Request
에러와 만나게 된다. ▶ docker 이미지 생성 및 파일로 변환
# 1. Dockerfile 을 기반으로 docker 이미지 생성
[root@cicd-server ~] docker build -t <My-DockerHub-Name>/hello:1.0.0 .
# 2. 생성된 docker 이미지 조회
[root@cicd-server ~] docker image list
# 3. 2.0.0 버전의 태그 생성
[root@cicd-server ~] docker tag zxd46/hello:1.0.0 zxd46/hello:2.0.0
# 4-1. DockerHub 계정으로 로그인
[root@cicd-server ~] docker login -u zxd46
# 4-2. DockerHub에 이미지 push
[root@cicd-server ~] docker push zxd46/hello:1.0.0
# 5. 로컬 환경에 있는 이미지 삭제
[root@cicd-server ~] docker rmi zxd46/hello:1.0.0
# 6. DockerHub에서 이미지 다운로드
[root@cicd-server ~] docker pull zxd46/hello:1.0.0
# 7. 이미지를 file.tar 파일로 변환
[root@cicd-server ~] docker save -o file.tar zxd46/hello:1.0.0
# 8. file.tar 파일을 이미지로 변환
[root@cicd-server ~] docker load -i file.tart
▶ 결과
▶ containerd 이미지 생성 및 파일로 변환
# 1. 네임스페이스 목록 조회
[root@k8s-master ~] ctr ns list
# 2. k8s.io 네임스페이스 이미지 목록 조회
[root@k8s-master ~] ctr -n k8s.io image list
# 3. default 네임스페이스에 컨테이너 이미지 다운로드
[root@k8s-master ~] ctr images pull docker.io/zxd46/hello:1.0.0
# 4. 2.0.0 버전의 태그 생성
[root@k8s-master ~] ctr images tag docker.io/zxd46/hello:1.0.0 docker.io/zxd46/hello:2.0.0
# 5. DockerHub에 이미지 push
[root@k8s-master ~] ctr image push docker.io/zxd46/hello:2.0.0 --user zxd46
# 6. 이미지를 file.tar 파일로 변환
[root@k8s-master ~] ctr -n default image export file.tar docker.io/zxd46/hello:1.0.0
# 7. file.tar 파일을 이미지로 변환
[root@k8s-master ~] ctr -n k8s.io image import file.tar
# 8. k8s.io 네임스페이스에서 이미지 삭제
[root@k8s-master ~] ctr -n k8s.io image remove docker.io/zxd46/hello:1.0.0
▶ 결과
Docker Hub에서 이미지 크기를 확인했을 때는 247.49MB인 것을 확인할 수 있다.
하지만 docker pull 명령어를 통해 이미지를 다운받았을 때는 520MB로 훨씬 커진 것을 확인할 수 있다.
이미지의 크기가 커진 이유에 대해서 여러 가정을 세워보고 확인을 해보자.
▶ docker pull 로 받은 이미지 정보 조회
[root@cicd-server ~] docker image inspect zxd46/api-tester:v1.0.0
▶ 결과 (arm64로 Docker Hub와 동일함)
▶ 결론: 아님.
Kubernetes에는 기존 이미지에 Layer가 이미 존재한다면 docker pull 시에 가져오는 이미지가 더 작아야하는 게 맞겠지만, 반대로 커졌기 때문에 말이 안된다.
(그래도 해보는 예제)
▶ docker image를 tar 파일로 변환 후 Master Node로 복사
▶ Master Node에서 이미지가 존재하지 않음을 확인하고. tar 파일을 다시 이미지로 변환해도 크기는 거의 동일함.
▶ 결론: 아님.
▶ 현재 쿠버네티스는 기본 컨테이너 런타임으로 Containerd를 사용하고 있다. docker는 실제 이미지 크기에서 여러 도커 기능들과 메타데이터 규격에 맞는 데이터들을 추가해 이미지를 재구성하기 때문에 Containerd 이미지보다 더 큰 크기를 갖게된다.
따라서, Containerd를 사용하는 쿠버네티스 환경에서 Docker로 받은 이미지를 복사하는 경우 불필요하게 큰 이미지를 사용하게 된다.
▶ 결론: 맞다. containerd를 사용하는 환경에서는 Docker로 만들어진 이미지를 그대로 사용하면 불필요한 사이즈를 사용하게 되니 주의하자.