AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

Amazon EKS에서 ErrImagePull 및 ImagePullBackoff 오류를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 포드 상태가 ErrImagePull 또는 ImagePullBackoff 상태입니다.

간략한 설명

kubectl 명령 get pods를 실행하고 포드가 ImagePullBackOff 상태인 경우, 포드가 제대로 실행되지 않는 것입니다. ImagePullBackOff 상태는 이미지를 검색하거나 가져올 수 없어서 컨테이너가 시작되지 않았음을 의미합니다. 이 문제를 해결하려면 다음 해결 방법을 사용하세요.

자세한 내용을 보려면 Amazon EKS 커넥터 포드가 ImagePullBackOff 상태임을 참조하세요.

해결 방법

이미지 정보 확인

다음 단계를 사용하여 포드 상태 오류 메시지를 확인하고 이미지 이름, 태그 및 보안 해시 알고리즘(SHA)이 올바른지 확인합니다.

  1. 포드 상태를 가져오려면 다음 명령을 실행합니다.

    $ kubectl get pods -n defaultNAME                              READY   STATUS             RESTARTS   AGE
    nginx-7cdbb5f49f-2p6p2            0/1     ImagePullBackOff   0          86s
  2. 포드 장애 세부 정보를 가져오려면 다음 명령을 실행합니다.

    $ 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"
  3. 이미지 태그와 이름이 존재하고 정확한지 확인하세요.

  4. 이미지 레지스트리에 인증이 필요한 경우 액세스 권한이 있는지 확인하세요. 포드에 사용된 이미지가 올바른지 확인하려면 다음 명령을 실행합니다.

    $ 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 속도 제한을 참조하세요.

AWS 공식
AWS 공식업데이트됨 9달 전