Profile picture

[K8s] minikube Mount 에러

JaehyoJJAng2023년 05월 03일

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

Loading script...