Mount Error
아래처럼 쿠버 명세서를 작성하고 apply
를 진행하였는데 Pod의 Status가 자꾸 CrashLoopBackOff 되는 상황이 발생
apiVersion: apps/v1
kind: Deployment
metadata:
name: counter-app
spec:
replicas: 3
selector:
matchLabels:
app: counter-app
template:
metadata:
labels:
app: counter-app
spec:
containers:
- name: counter-app
image: yshrim12/counter
ports:
- containerPort: 8081
protocol: TCP
volumeMounts:
- name: counter-txt
mountPath: /app
volumes:
- name: counter-txt
hostPath:
type: Directory
path: /home/docker/data
---
apiVersion: v1
kind: Service
metadata:
name: counter-app-svc
spec:
type: NodePort
ports:
- port: 8081
nodePort: 30000
protocol: TCP
selector:
app: counter-app
Pod 상세정보 조회
$ kubectl get pods | tail -n 1 | awk '{print $1}'
counter-app-778576548c-kds6n
# 상세정보 조회
$ kubectl describe pod/counter-app-778576548c-kds6n
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m19s default-scheduler Successfully assigned default/counter-app-778576548c-kds6n to minikube
Normal Pulled 5m16s kubelet Successfully pulled image "yshrim12/counter" in 2.620516406s
Normal Pulled 5m9s kubelet Successfully pulled image "yshrim12/counter" in 6.287221068s
Normal Pulled 4m50s kubelet Successfully pulled image "yshrim12/counter" in 2.419058346s
Normal Created 4m25s (x4 over 5m16s) kubelet Created container counter-app
Normal Started 4m25s (x4 over 5m16s) kubelet Started container counter-app
Normal Pulled 4m25s kubelet Successfully pulled image "yshrim12/counter" in 2.503470991s
Normal Pulling 3m35s (x5 over 5m19s) kubelet Pulling image "yshrim12/counter"
Warning BackOff 12s (x24 over 5m8s) kubelet Back-off restarting failed container
정확한 원인을 찾지 못하였음
조치 1
minikube는 말 그대로 컨테이너이다. ($ minikube ssh
명령으로 컨테이너에 접속할 수 있다.) 경로도 마찬가지로 해당 컨테이너의 경로로 인식하여, 아무리 로컬의 경로를 써주어도 찾아주지 못한다. 따라서 minikube를 생성할 때 로컬의 경로와 해당 minikube의 경로를 마운트하여 사용하도록 한다.
$ minikube start --mount --mount-string="/host/path:/minikubeContainer/path"
위 방법으로도 해결이 안되는 중
조치 2
local - minikube 마운트 후 minikube에서 local과 mount된 파일과 컨테이너의 볼륨과 마운트를 또 시켜줘야 한다
그래서 로컬의 /home/docker/minikube-data
를 마운트 디렉토리로 지정하고 minikube node의 /minikube-data
로 마운트를 진행시켜 (없으면 자동으로 생성해줌)
$ minikube mount /home/docker/minikube-data/:/minikube-data
📁 Mounting host path /home/docker/minikube-data/ into VM as /minikube-data ...
▪ Mount type: 9p
▪ User ID: docker
▪ Group ID: docker
▪ 버전: 9p2000.L
▪ 메시지 사이즈: 262144
▪ 옵션: map[]
▪ 연결된 주소 : 192.168.49.1:35419
🚀 Userspace file server: ufs starting
✅ Successfully mounted /home/docker/minikube-data/ to /minikube-data
📌 NOTE: This process must stay alive for the mount to be accessible ...
참고로 해당 쉘이 유지되는 동안 마운트가 진행되기 때문에 쉘이 종료되면 마운트도 종료된다.
nohup
커맨드를 사용하여 백그라운드로 실행시키자
$ nohup minikube mount /home/docker/minikube-data/:/minikube-data 1>/dev/null 2>&1 &
마운트가 정상적으로 되었는지 확인해보자
# local
$ touch /home/docker/minikube-data/text.txt
# minikube
$ minikube ssh
$ ls -lh /minikube-data
total 0
-rw-r--r-- 1 docker docker 0 Jun 15 03:56 d
-rw-rw-r-- 1 docker docker 0 Jun 15 03:57 test.txt