[Kubernetes] minikube docker-env 이후 docker가 실행 안되는 현상

bluejoy·2023년 6월 4일
0

Kubernetes

목록 보기
1/1

시작 전에

쿠버네티스를 공부하면서 적은 거라 일부러 설명을 상세히 적었습니다.

과정

에러가 발생하기까지의 과정

docker 이미지 빌드 및 deployment yaml 작성

minikube를 사용해 쿠버네티스를 공부 중에 있다.
최근 직접 deployment를 만들어 보기 위해 도커 이미지를 하나 열심히 작성하고 빌드했다.

이후 pc-deployment.yaml을 작성하고

// pc-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: 
    pc-deployment 
  labels:
      app: pc-deployment-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pc-deployment-example
  template:
    metadata:
      labels:
        app: pc-deployment-example
    spec:
      containers:
      - name: producer
        image: producer-image
        imagePullPolicy: Never
        ports:
        - containerPort: 3000
               

kubectl apply -f pc-deployment.yaml 명령어를 실행해 deployment를 생성했다.
이후 kubectl get deployment pc-deployment 명령어를 통해 현재 deployment의 상태를 보니

NAME            READY   UP-TO-DATE   AVAILABLE   AGE
pc-deployment   0/3     3            0           33m

다음과 같이 pod이 하나도 실행이 안되었다.

1차 원인 파악하기

kubectl get pod을 통해 pod의 상태를 확인해보았다.

NAME                             READY   STATUS              RESTARTS   AGE
pc-deployment-5d894bbd6b-4dmj5   0/1     ErrImageNeverPull   0          36m
pc-deployment-5d894bbd6b-65h9b   0/1     ErrImageNeverPull   0          36m
pc-deployment-5d894bbd6b-jzk7h   0/1     ErrImageNeverPull   0          36m

STATUS가 ErrImageNeverPull였다. 이미지를 못찾고 있었다.

관련 문제를 찾아보니 로컬 이미지를 못찾는 현상에 대해 잘 설명된 글들이 많았다. 관련 글

도커의 로컬 이미지 kubernetes에서 이용하기

위 글에서 언급된 것처럼 eval $(minikube docker-env)을 실행하나 minikube에서도 이미지를 잘 찾을 수 있었다.

그러나 이후 minikube를 중단 이후 docker images ls를 실행하니 계속 Cannot connect to the Docker daemon at tcp://127.0.0.1:*****. Is the docker daemon running?과 같은 에러가 발생했다.

2차 원인 파악하기

위의 eval $(minikube docker-env) 명령은 docker climinikube docker로 대체하는 명령어였다.

한번 실행하면 현재 터미너 세션의 docker 서비스 관련된 환경변수를 덮어 씌우므로 해제해야만 dockerminikube 없이도 접근 가능하다(혹은 터미널을 끄면 된다!)
eval $(minikube docker-env --unset)

수정하기

minikube image ls 통해 목록을 보면

registry.k8s.io/pause:3.9
registry.k8s.io/kube-scheduler:v1.26.3
registry.k8s.io/kube-proxy:v1.26.3
registry.k8s.io/kube-controller-manager:v1.26.3
registry.k8s.io/kube-apiserver:v1.26.3
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3
gcr.io/k8s-minikube/storage-provisioner:v5
gcr.io/google-samples/kubernetes-bootcamp:v1
docker.io/library/redis:latest
docker.io/library/redis:<none>
docker.io/library/producer-image:0.0.1
docker.io/library/node:18-alpine
docker.io/library/node:18
docker.io/library/nginx:latest
docker.io/library/nginx:<none>
docker.io/kubernetesui/metrics-scraper:<none>
docker.io/kubernetesui/dashboard:<none>

요런 식으로 이미지 목록이 나온다. 도커 이미지는 docker.io/library/이라는 prefix가 붙으므로 yaml을 수정해주자.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: 
    pc-deployment 
  labels:
      app: pc-deployment-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pc-deployment-example
  template:
    metadata:
      labels:
        app: pc-deployment-example
    spec:
      containers:
      - name: producer
        image: docker.io/library/producer-image:0.0.1
        imagePullPolicy: Never
        ports:
        - containerPort: 3000

이렇게 하면 잘 된다!

profile
개발자 지망생입니다.

0개의 댓글