메인 콘텐츠로 건너뛰기

EKS 노드에서 삭제된 이미지를 ECR로 복구하는 방법

설탕사과
설탕사과
조회수 18
요약

문제 상황: ECR에서 이미지가 삭제된 경우

개발 환경에서 사용 중인 이미지가 ECR에서 삭제되어, 파이프라인 재빌드도 불가능할 때가 있습니다. 그 이미지가 남아있는 유일한 곳이 EKS 노드라면, 직접 노드에서 이미지를 복구해야 합니다.

준비 환경 요약

아래 환경에서 작업을 진행합니다.

  • EKS 클러스터: 1.30.3

  • Kubectl: 1.30.1

  • Containerd: 1.7.11

  • Runc: 1.1.11

EKS 노드에 접속하는 방법

EKS 노드에 원격으로 접근하려면 AWS 콘솔에서 세션 매니저를 사용하면 편리합니다. 인스턴스의 connect 옵션을 누르면 바로 접속할 수 있습니다.

노드에서 이미지 확인하기

관리자로 권한을 얻은 후, nerdctl 명령어로 노드에 저장된 이미지를 조회할 수 있습니다.

sudo -s
nerdctl images

원하는 이미지를 찾으면, 해당 태그와 레포지토리 주소를 확인하세요.

ECR로 이미지 푸시 시 문제 및 해결법

이미지 복구를 위한 nerdctl push 명령을 실행하면 에러가 발생할 수 있습니다.

  1. 첫 에러 메시지는 “failed to create a tmp single-platform image”. → 해결: 명령에 --all-platforms 옵션 추가

nerdctl push [이미지명] --all-platforms
  1. 이후 “401 Unauthorized” 에러 발생 → 이 경우는 ECR 인증이 안 된 것. 다음 명령어로 로그인해야 합니다.

aws ecr get-login-password --region eu-west-2 | nerdctl login --username AWS --password-stdin [ECR 주소]
  1. 또 “403 Forbidden” 에러가 뜬다면 → 노드의 IAM 역할에 ecr:PutImage 권한을 임시로 추가해 주세요.

권한과 인증 이슈 정리

이미지를 다시 푸시하려면 반드시 ECR에 인증과 적절한 권한이 필요합니다.

  • ECR 인증: aws ecr get-login-password

  • 이미지 푸시 권한: IAM에서 ecr:PutImage 정책 필요

전체 복구 순서 요약

  1. EKS 노드에 접속

  2. nerdctl로 이미지 확인

  3. ECR 인증 및 권한 처리

  4. --all-platforms 플래그를 이용해 이미지 푸시

  5. 이미지를 성공적으로 복구!

자주 사용하는 명령어 모음

복구 작업에서 사용한 주요 명령어는 다음과 같습니다.

nerdctl images
nerdctl push [이미지명] --all-platforms
aws ecr get-login-password --region [리전] | nerdctl login --username AWS --password-stdin [ECR 주소]

빠른 이미지 복구 팁

노드에 남아있는 이미지가 마지막 희망일 때, nerdctl과 몇 가지 권한 설정이면 누구나 이미지를 ECR로 복구할 수 있습니다. IAM 정책 추가와 인증을 잊지 마세요!


출처 : Amazon EKS- recover deleted images from EKS node to ECR repository | by Marcin Cuber | Medium