Docker Desktop + k8s 환경에서 local 이미지를 사용하는 방법
지난 글의 실습을,
ASP.NET Core 프로젝트를 AKS/k8s에 올리는 과정
; https://www.sysnet.pe.kr/2/0/12931
AKS가 아닌 로컬로 구성한 k8s에서,
Docker Desktop for Windows에서 DockerDesktopVM 기반의 Kubernetes 구성
; https://www.sysnet.pe.kr/2/0/12575
하면 어떻게 될까요? 일단, Docekrfile을 빌드하면서 로컬 docker에 이미지가 등록될 것입니다.
C:\temp> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dotnet_razor31_sample latest 8eb103dc1d37 6 days ago 240MB
그런 다음 로컬 docker에 등록된 image 경로를 가리키는 yaml 파일을 이용해,
apiVersion: apps/v1
kind: Deployment
metadata:
name: net-razor31-sample
spec:
replicas: 1
selector:
matchLabels:
app: dotnet-razor31-sample
template:
metadata:
labels:
app: dotnet-razor31-sample
spec:
containers:
- name: dotnet-razor31-sample
image: dotnet_razor31_sample
ports:
- containerPort: 80
env:
- name: ASPNETCORE_URLS
value: "http://+:80"
---
apiVersion: v1
kind: Service
metadata:
name: dotnet-razor31-sample
spec:
type: LoadBalancer
ports:
- port: 13502
targetPort: 80
protocol: TCP
name: http
selector:
app: dotnet-razor31-sample
k8s에 올리면,
c:\temp> kubectl apply -f test.yaml
deployment.apps/net-razor31-sample created
service/dotnet-razor31-sample created
이렇게 (시간에 따라)
ErrImagePull/ImagePullBackOff 오류가 발생합니다.
c:\temp> kubectl get pod
NAME READY STATUS RESTARTS AGE
net-razor31-sample-6dc4fd6d49-t7fxx 0/1 ErrImagePull 0 8s
c:\temp> kubectl get pod
NAME READY STATUS RESTARTS AGE
net-razor31-sample-6dc4fd6d49-t7fxx 0/1 ImagePullBackOff 0 35s
왜냐하면, 기본적으로 k8s는 docker hub에서 이미지를 받아오려 하기 때문입니다. 이에 대한 해법이 다음의 글에 나오는데요. ^^
Docker for Mac - Kubernetes - reference local image
; https://stackoverflow.com/questions/50739405/docker-for-mac-kubernetes-reference-local-image
따라서 local의 docker로 변경하고 싶다면 별도로 "imagePullPolicy: Never" 설정을 추가해야 합니다.
...[생략]...
spec:
containers:
- name: dotnet-razor31-sample
image: dotnet_razor31_sample
imagePullPolicy: Never
ports:
- containerPort: 80
env:
- name: ASPNETCORE_URLS
value: "http://+:80"
...[생략]...
만약 yaml을 경유하지 않고 "kubectl run"으로 실행하는 경우라면 해당 옵션을 지정해도 됩니다.
c:\temp> kubectl run my-test --image=dotnet_razor31_sample --image-pull-policy=Never
// pod 삭제
// kubectl delete pod my-test
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]