# 설치 후 구동
minikube start
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 에서 이용 가능한 이미지 조회
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