본문 바로가기

개발하자

이 Kubernetes 배포 환경에서 ErrrImagePull 오류가 발생하는 이유는 무엇입니까?

반응형

이 Kubernetes 배포 환경에서 ErrrImagePull 오류가 발생하는 이유는 무엇입니까?

나는 미니큐브, 도커 레지스트리, 데모 노드 프로젝트를 사용하여 로컬 쿠버네티스 배치를 만들고자 합니다.

처음에 도커 v1.12.3을 설치하고 미니큐브 v0.12.2를 설치했다.

그런 다음 이 명령을 실행하여 Docker Registry 컨테이너를 만들었습니다(를 통해 아래 첫 번째 명령만 실행)

docker run -d -p 5000:5000 --name registry registry:2

다음으로 이 미니큐브 명령을 실행하여 로컬 쿠버네티스 클러스터를 만들었습니다:

minikube start --vm-driver="virtualbox" --insecure-registry="0.0.0.0:5000"

제 프로젝트 구조는 다음과 같습니다:

.
├── Dockerfile
└── server.js

그리고 내 도커 파일은 다음과 같다:

FROM node:7.1.0
EXPOSE 8080
COPY server.js .
CMD node server.js

그런 다음 나만의 도커 이미지를 구축하여 개인 저장소로 푸시했습니다:

docker build -t hello-node .
docker tag hello-node localhost:5000/hello-node
docker push localhost:5000/hello-node

그런 다음 이 명령을 사용하여 배포를 실행하려고 했습니다:

kubectl run hello-node --image=localhost:5000/hello-node --port=8888

하지만 난 이해가 되요:

sudo kubectl get pods --all-namespaces                                                                                                                             
NAMESPACE     NAME                          READY     STATUS         RESTARTS   AGE
default       hello-node-3745105022-gzs5a   0/1       ErrImagePull   0          11m
kube-system   kube-addon-manager-minikube   1/1       Running        4          10d
kube-system   kube-dns-v20-2x64k            3/3       Running        12         10d
kube-system   kubernetes-dashboard-mjpjv    1/1       Running        4          10d

내가 일종의 도커 등록 인증을 놓쳤을 수도 있다고 생각하지만, 내가 구글링을 하고 있기 때문에 내가 이해할 수 있는 것을 찾을 수가 없다. 누가 제게 올바른 방향을 가르쳐 주실 수 있나요?

편집

ssh를 사용하여 kubernetes VM에 액세스한 후 다음 명령을 사용하여 내 개인 레지스트리에서 이미지를 꺼냅니다:

minikube ssh
Boot2Docker version 1.11.1, build master : 901340f - Fri Jul  1 
22:52:19 UTC 2016
Docker version 1.11.1, build 5604cbe
docker@minikube:~$ sudo docker pull localhost:5000/hello-node
Using default tag: latest
Pulling repository localhost:5000/hello-node
Error while pulling image: Get http://localhost:5000/v1/repositories/hello-node/images: dial tcp 127.0.0.1:5000: getsockopt: connection refused

kubernetes 호스트 VM 내에서 사용할 올바른 주소입니까?




호스트에서 레지스트리를 실행하는 것 같습니다. 실제로 VM 내부에서 레지스트리를 실행해야 합니다. 셸에서 이 명령을 먼저 실행하면 도커 클라이언트가 미니큐브 VM 내의 도커 데몬을 가리킬 수 있습니다.

그런 다음 호스트에서 도커 빌드 명령을 실행할 수 있지만 VM 내부에 빌드됩니다.

사실 이미지의 로컬 버전을 단순히 실행하는 것이 목표라면 VM에서 도커 데몬을 향해 를 실행하고 포드 YAML에서 를 설정해야 한다. 그런 다음, kubernetes는 사용 가능한 경우 로컬에서 빌드된 이미지를 사용한다.




나도 같은 문제가 있어서 설정을 해봤는데 잘 되더라.

에서 이해한 바와 같이 이미지를 끌어내려고 했는데, 물론 이 이미지는 원격 서버에 존재하지 않기 때문에 실패한 것입니다.

위 속성은 레지스트리에 연결하는 것을 피하고 도커 로컬 이미지 캐시의 이미지를 사용할 것이다.

spec:
  template:
    spec:
      containers:
        - image: my/local-image
          imagePullPolicy: Never



이 기사는 나의 비슷한 오류를 해결했다

더하다

spec:
  template:
    metadata:
      name: hello-world-pod
    spec:
      containers:
      - name: hello-world
        image: forketyfork/hello-world
        imagePullPolicy: Never
      restartPolicy: Never

그런 다음 로컬 컨테이너 레지스트리를 미니큐브 도커 컨테이너 레지스트리에 연결합니다.

다음 명령을 실행합니다:

eval $(minikube -p minikube docker-env)

이제 도커 이미지와 쿠벡틀 서비스를 다시 구축하십시오. 그게 끝입니다!




미니큐브의 경우 다음 단계를 따릅니다

  1. 값 업데이트.yaml을 사용
  2. 미니큐브에서 수동으로 이미지 업로드하기
  3. 미니큐브 VM에서 ssh를 사용하여 이미지가 업로드되었는지 확인
  4. 기존 배포를 제거하고 다시 설치합니다. 다음을 사용하여 기존 배포 메트를 확인할 수 있습니다

반응형