[Mendix][PrivateCloud]07 minikube ERROR 확인 하기
실습은 윈도우 10 데스크톱에서 진행되었다
Private Cloud로 Deplpoy 하다 보면 Fail이 발생하거나 무한 Deploy(?) (Deploy가 완료되지 않는 현상)가 발생하는 경우가 있다
이럴 경우에는 kubernetes에 접속하여 log를 보고 원인 파악을 해야 한다
이번 글에서 진행될 예제는 Mendix에서 Start Your First App 샘플 프로젝트를 Private Cloud에 Deploy 했을 경우 Deploy가 완료되지 않는 현상을 예로 든다
샘플 프로젝트를 Private Cloud에 Deploy 하면 Deploy가 완료 되지 않는 현상이 발생한다
우선 kubernetes 대시보드를 통해 원인 파악을 해보겠다
Git bash에서 다음 명령어를 입력한다
minikube dashboard
실행이 완료되면 웹브라우저에서 대시보드가 출력된다
네임스페이스를 모든 네임스페이스로 바꾸면 어떤 pod에서 에러가 발생하는지 확인이 가능하다
Git bash에서도 확인이 가능하다
전체 네임스페이스에서 에러가 발생한 pod 확인하는 명령어이다
Git bash에서 다음 명령어를 입력한다
kubectl get pods -o wide --all-namespaces
kubetest-testpc-0 pod가 STATUS가 CrashLoopBackOff
pod가 정상 실행되지 않아 Deploy가 완료되지 않은 것이다
pod의 정보를 보기 위해서는 namespace, pod name이 필요하다
다음 명령어는 현재 클러스터에 있는 namespace 리스트출력하는 명령어이다
Git bash에서 다음 명령어를 입력한다
kubectl get namespace
내가 생성한 namespace가 보인다
이제 pod의 name을 알아내야 한다
특정 namespace에 있는 pod 리스트를 보여주는 명령어는 다음과 같다
$kubectl get pod -n [namespace 이름]
Gitbash에서 다음 명령어를 입력한다
kubectl get pod -n demo-namespace
이젠 모든 정보들이 모였다
특정 pod 정보 보기 명령어는 다음과 같다
$kubectl describe -n [namespace 이름] pods [pod 이름]
Git bash에서 다음 명령어를 입력한다
kubectl describe -n demo-namespace pods kubetest-testpc-0
state가 Waitting이다 그 이유는 CrashLoopBackOff 이기 때문이다
하단 아래쪽으로 이동하면 Event 로그를 볼 수 있다
이벤트 로그에서는 자세한 정보가 안 나오는 것 같다
pod로그로 자세한 내용을 보도록 하겠다
pod 로그 보는 명령어는 다음과 같다
$kubectl logs [pod 이름] -n [namespace 이름]
kubectl logs kubetest-testpc-0 -n demo-namespace
컨테이너 1개를 선택해달라고 한다
어떤 컨테이너인 줄 몰라 minikube dashboard에서 확인해보았다
처음에 실행한 kubenetes 대시보드에서
네임스페이스를 demo-namespace(App이 배포된 Cloud 선택)을 선택하고 파드를 클릭하여 에러난 파드의 정보를 확인한다
제일 마지막 부분을 보게 되면 컨테이너 부분에 mendix라고 보인다
m2ee-sidecar, m2ee-metrics는 kubernetes에서 사용하는 컨테이너 같다
다시 명령어를 수정하여 입력한다
kubectl logs kubetest-testpc-0 -n demo-namespace mendix
로그를 보니 CRTICAL 레벨의 에러가 보인다
Afterstartup에서 에러가 발생하는 것 같다
프로젝트를 열어 AfterStartup을 제거하고 다시 배포하도록 한다
AfterStartup을 제거
소스를 commit 하고 다시 Deploy하니 정상적으로 Deploy가 되었다
App URL에 접속하니 정상적으로 App이 실행되었다
예제처럼 App 실행이 제대로 안됬을 경우에는 kubernetes의 node, pod, container에 에러가 발생했는지 확인 후
조치를 취하면 된다
*정리*
대시보드
minikube dashboard
전체 네임스페이스에서 에러가 발생한 pod 확인
kubectl get pods -o wide --all-namespaces
현재 클러스터에 있는 namespace 리스트 확인
kubectl get namespace
특정 namespace에 있는 pod 리스트 확인
$kubectl get pod -n [namespace 이름]
kubectl get pod -n demo-namespace
특정 pod 정보 확인
$kubectl describe -n [namespace 이름] pods [pod 이름]
kubectl describe -n demo-namespace pods kubetest-testpc-0
특정 pod 로그 확인
$kubectl logs [pod 이름] -n [namespace 이름] [컨테이너 이름]
kubectl logs kubetest-testpc-0 -n demo-namespace mendix