쿠버네티스를 공부하면서 적은 거라 일부러 설명을 상세히 적었습니다.
에러가 발생하기까지의 과정
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
이 하나도 실행이 안되었다.
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
였다. 이미지를 못찾고 있었다.
관련 문제를 찾아보니 로컬 이미지를 못찾는 현상에 대해 잘 설명된 글들이 많았다. 관련 글
위 글에서 언급된 것처럼 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?
과 같은 에러가 발생했다.
위의 eval $(minikube docker-env)
명령은 docker cli
를 minikube docker
로 대체하는 명령어였다.
한번 실행하면 현재 터미너 세션의 docker
서비스 관련된 환경변수를 덮어 씌우므로 해제해야만 docker
를 minikube
없이도 접근 가능하다(혹은 터미널을 끄면 된다!)
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
이렇게 하면 잘 된다!