Amazon EKS에서 ErrImagePull 및 ImagePullBackoff 오류를 해결하려면 어떻게 해야 합니까?
Amazon Elastic Kubernetes Service(Amazon EKS) 포드 상태가 ErrImagePull 또는 ImagePullBackoff 상태입니다.
간략한 설명
kubectl 명령 get pods를 실행하고 포드가 ImagePullBackOff 상태인 경우, 포드가 제대로 실행되지 않는 것입니다. ImagePullBackOff 상태는 이미지를 검색하거나 가져올 수 없어서 컨테이너가 시작되지 않았음을 의미합니다. 이 문제를 해결하려면 다음 해결 방법을 사용하세요.
자세한 내용을 보려면 Amazon EKS 커넥터 포드가 ImagePullBackOff 상태임을 참조하세요.
해결 방법
이미지 정보 확인
다음 단계를 사용하여 포드 상태 오류 메시지를 확인하고 이미지 이름, 태그 및 보안 해시 알고리즘(SHA)이 올바른지 확인합니다.
-
포드 상태를 가져오려면 다음 명령을 실행합니다.
$ kubectl get pods -n defaultNAME READY STATUS RESTARTS AGE nginx-7cdbb5f49f-2p6p2 0/1 ImagePullBackOff 0 86s
-
포드 장애 세부 정보를 가져오려면 다음 명령을 실행합니다.
$ kubectl describe pod nginx-7cdbb5f49f-2p6p2 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m23s default-scheduler Successfully assigned default/nginx-7cdbb5f49f-2p6p2 to ip-192-168-149-143.us-east-2.compute.internal Normal Pulling 2m44s (x4 over 4m9s) kubelet Pulling image "nginxx:latest" Warning Failed 2m43s (x4 over 4m9s) kubelet Failed to pull image "nginxx:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for nginxx, repository does not exist or may require 'docker login': denied: requested access to the resource is denied Warning Failed 2m43s (x4 over 4m9s) kubelet Error: ErrImagePull Warning Failed 2m32s (x6 over 4m8s) kubelet Error: ImagePullBackOff Normal BackOff 2m17s (x7 over 4m8s) kubelet Back-off pulling image "nginxx:latest"
-
이미지 태그와 이름이 존재하고 정확한지 확인하세요.
-
이미지 레지스트리에 인증이 필요한 경우 액세스 권한이 있는지 확인하세요. 포드에 사용된 이미지가 올바른지 확인하려면 다음 명령을 실행합니다.
$ kubectl get pods nginx-7cdbb5f49f-2p6p2 -o jsonpath="{.spec.containers[*].image}" | \sort nginx:latest
포드 상태 값을 이해하려면 Kubernetes 웹 사이트의 포드 단계와 Amazon EKS에서 포드 상태 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.
프라이빗 레지스트리 문제 해결
Amazon EKS를 사용하여 프라이빗 레지스트리에서 이미지를 검색하는 경우 추가 구성이 필요할 수 있습니다. 워크로드 매니페스트에서 imagePullSecrets를 사용하여 자격 증명을 지정합니다. 이러한 자격 증명은 프라이빗 레지스트리를 통해 인증됩니다. 이렇게 하면 포드가 지정된 프라이빗 리포지토리에서 이미지를 가져올 수 있습니다.
시크릿의 내용을 보려면 다음 명령어를 사용하여 YAML에서 확인하세요.
kubectl get secret <secret_name> --output=yaml
다음 예제에서 포드는 regcred의 Docker 레지스트리 자격 증명에 액세스해야 합니다.
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: your-private-image imagePullSecrets: - name: regcred
다음과 같이 your-private-image를 프라이빗 레지스트리의 이미지 경로로 바꾸세요.
your.private.registry.example.com/bob/bob-private:v1
프라이빗 레지스트리에서 이미지를 가져오려면 Kubernetes에 자격 증명이 필요합니다. 구성 파일의 imagePullSecrets 필드는 Kubernetes가 regcred라는 이름의 시크릿으로부터 자격 증명을 가져와야 한다고 지정합니다.
자세한 내용을 보려면 Kubernetes 웹 사이트의 프라이빗 레지스트리에서 이미지 가져오기를 참조하세요.
추가 레지스트리 문제 해결
이미지 가져오기 실패 문제
“Failed to pull image...” 오류는 kubelet이 프라이빗 레지스트리 엔드포인트에 연결을 시도했지만 연결 타임아웃으로 인해 실패했음을 의미합니다.
다음 예제에서는 kubelet이 프라이빗 레지스트리 엔드포인트에 도달할 수 없기 때문에 레지스트리에 액세스할 수 없습니다.
$ kubectl describe pods nginx-9cc69448d-vgm4m ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 16m default-scheduler Successfully assigned default/nginx-9cc69448d-vgm4m to ip-192-168-149-143.us-east-2.compute.internal Normal Pulling 15m (x3 over 16m) kubelet Pulling image "nginx:stable" Warning Failed 15m (x3 over 16m) kubelet Failed to pull image "nginx:stable": rpc error: code = Unknown desc = Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) Warning Failed 15m (x3 over 16m) kubelet Error: ErrImagePull Normal BackOff 14m (x4 over 16m) kubelet Back-off pulling image "nginx:stable" Warning Failed 14m (x4 over 16m) kubelet Error: ImagePullBackOff
이 오류를 해결하려면 레지스트리 엔드포인트와의 통신을 허용하는 서브넷, 보안 그룹 및 네트워크 ACL을 확인하세요.
레지스트리 속도 제한 초과
다음 예에서는 레지스트리 속도 제한이 초과되었습니다.
$ kubectl describe pod nginx-6bf9f7cf5d-22q48 ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m54s default-scheduler Successfully assigned default/nginx-6bf9f7cf5d-22q48 to ip-192-168-153-54.us-east-2.compute.internal Warning FailedCreatePodSandBox 3m33s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "82065dea585e8428eaf9df89936653b5ef12b53bef7f83baddb22edc59cd562a" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Warning FailedCreatePodSandBox 2m53s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "20f2e27ba6d813ffc754a12a1444aa20d552cc9d665f4fe5506b02a4fb53db36" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Warning FailedCreatePodSandBox 2m35s kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "d9b7e98187e84fed907ff882279bf16223bf5ed0176b03dff3b860ca9a7d5e03" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Warning FailedCreatePodSandBox 2m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "c02c8b65d7d49c94aadd396cb57031d6df5e718ab629237cdea63d2185dbbfb0" network for pod "nginx-6bf9f7cf5d-22q48": networkPlugin cni failed to set up pod "nginx-6bf9f7cf5d-22q48_default" network: add cmd: failed to assign an IP address to container Normal SandboxChanged 119s (x4 over 3m13s) kubelet Pod sandbox changed, it will be killed and re-created. Normal Pulling 56s (x3 over 99s) kubelet Pulling image "httpd:latest" Warning Failed 56s (x3 over 99s) kubelet Failed to pull image "httpd:latest": rpc error: code = Unknown desc = Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit Warning Failed 56s (x3 over 99s) kubelet Error: ErrImagePull Normal BackOff 43s (x4 over 98s) kubelet Back-off pulling image "httpd:latest"
가져오기 속도 제한에 도달한 후 퍼블릭 Docker Hub 리포지토리에서 이미지를 가져오려고 하면 작업이 중지됩니다. 자세한 내용을 보려면 Docker Hub 웹 사이트의 Docker Hub 속도 제한을 참조하세요.
관련 콘텐츠
- 질문됨 2년 전lg...
- 질문됨 일 년 전lg...
- 질문됨 3달 전lg...
- 질문됨 9달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전
- AWS 공식업데이트됨 일 년 전