minikube + docker 로 deployment 생성 중 오류 (ErrImagePull, ErrImageNeverPull, ImagePullBackOff) 대응

movhr·2024년 3월 22일
1

docker 설치

minikube 설치

# 설치 후 구동
minikube start

deployment 작성

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-spring
spec:
  selector:
    matchLabels:
      app: hello-spring
  template:
    metadata:
      labels:
        app: hello-spring
    spec:
      containers:
        - name: web
          image: hello-spring:v1

문제는 deployment 작성법을 배우고 작성했더니, docker로 빌드한 이미지를 가져올 수 없다고 한다.
해당 deployment가 생성한 pod를 조회하면 ErrImagePull가 떠 있었다.

로컬 명시

즉 정상적인 배포가 된 것이 아니었다.
이와 같은 오류는 docker hub에서 이미지를 끌어오고, 그곳에서 이미지가 없기 때문에 발생하는 오류이다. 로컬임을 명시해주는 것이 필요하다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-spring
spec:
  selector:
    matchLabels:
      app: hello-spring
  template:
    metadata:
      labels:
        app: hello-spring
    spec:
      containers:
        - name: web
          image: hello-spring:v1
          imagePullPolicy: Never # 추가 #

위와 같이 spec.template.spec.containers[0].imagePullPolicy 를 추가해주고, Never 라는 값을 부여했다. 이는 도커 허브가 아닌 로컬에서 끌어오겠다는 정책을 명시한 것이다.
또, 터미널에 eval $(minikube docker-env) 입력해준다.

그리고 희망을 품고 다시 deployment를 생성하였으나
이제는 파드에서 ErrImageNeverPull 오류를 뱉고 있다.

minikube로 docker image 가져오기

# minikube 에서 이용 가능한 이미지 조회 
minikube image ls --format table

# 로컬에 존재하는 docker image 확인
docker images

# minikube 에 이미지 push 하기
minikube image load [imageName:tagName]

# 잠시 후 다시 minikube에서 이용 가능한 이미지 조회
minikube image ls --format table
|-----------------------------------------|---------|---------------|--------|
|                  Image                  |   Tag   |   Image ID    |  Size  |
|-----------------------------------------|---------|---------------|--------|
| registry.k8s.io/kube-apiserver          | v1.28.3 | 537e9a59ee2fd | 120MB  |
| registry.k8s.io/kube-controller-manager | v1.28.3 | 8276439b4f237 | 116MB  |
| registry.k8s.io/coredns/coredns         | v1.10.1 | 97e04611ad434 | 51.4MB |
| registry.k8s.io/etcd                    | 3.5.9-0 | 9cdd6470f48c8 | 181MB  |
| registry.k8s.io/pause                   | 3.9     | 829e9de338bd5 | 514kB  |
| gcr.io/k8s-minikube/storage-provisioner | v5      | ba04bb24b9575 | 29MB   |
| docker.io/library/hello-spring          | v1      | 24c70cd112bcf | 521MB  |
| registry.k8s.io/kube-scheduler          | v1.28.3 | 42a4e73724daa | 57.8MB |
| registry.k8s.io/kube-proxy              | v1.28.3 | a5dd5cdd6d3ef | 68.3MB |
|-----------------------------------------|---------|---------------|--------|

minikube image load 했던 이미지가 목록에서 뜨는 것을 확인 할 수 있다. 그러면 로컬에서 이미지를 받아올 수 있다.

그러면 yaml 에 이미지 주소를 아래와 같이 변경해준다.

image: docker.io/library/hello-spring:v1

정상 배포 확인

이제 deployment.yaml을 apply 하고 파드를 확인하면 정상 배포를 확인할 수 있다.

# input
kubectl get deployment -n test
# ouput
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
hello-spring   1/1     1            1           4h49m

# input
kubectl get pods -n test
# output
NAME                            READY   STATUS    RESTARTS   AGE
hello-spring-66cfd7d97f-hmcd4   1/1     Running   0          4h32m

참고

profile
괴발개발

0개의 댓글