이 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)
이제 도커 이미지와 쿠벡틀 서비스를 다시 구축하십시오. 그게 끝입니다!
미니큐브의 경우 다음 단계를 따릅니다
- 값 업데이트.yaml을 사용
- 미니큐브에서 수동으로 이미지 업로드하기
- 미니큐브 VM에서 ssh를 사용하여 이미지가 업로드되었는지 확인
- 기존 배포를 제거하고 다시 설치합니다. 다음을 사용하여 기존 배포 메트를 확인할 수 있습니다
'개발하자' 카테고리의 다른 글
socket.io 을 fastapi 앱에 마운트하고 연결된 모든 클라이언트에 브로드캐스트를 전송하는 방법 (0) | 2023.11.07 |
---|---|
"수출"을 패키지로 어떻게 사용할 수 있나요.json은 nested submodules와 TypeScript? (0) | 2023.11.07 |
스벨테 입력 번호 유효성 검사. 글자 입력을 막을 수 없다 (0) | 2023.11.06 |
펄럭임: 자동 완성 제안은 이름 대신 '객체의 인스턴스'를 표시합니다 (0) | 2023.11.05 |
href를 클릭하면 새 URL이 Svelte의 페이지를 다시 로드하지 않습니다 (0) | 2023.11.05 |