MSA/Part4. Ch.9 Kubernetes 트러블 슈팅 방법

04. [실습] POD 로깅 및 이슈 사례 조치방법

Engineer-Lee 2023. 2. 9. 16:52
반응형

1. POD 로깅 방법 소개

구분 상세 설명
kubectl • kubectl를 이용한 POD 정보 및 상태 확인
• EKS Namespace 내 POD의 상태 및 이벤트 확인 가능
Container Insights • EKS POD에서 수집된 Metrics값을 종합해서 출력
• 그래프 및 연결 토폴로지 맵, 리스트 형태 현황 제공
Log groups • EKS POD의 Log 수집 및 검색 가능
• Micro Service별 각 Container POD의 로그별로 조회 가능
crictl • Open Source Kubernetes의 경우, 1.20 버전부터 Runtime CRI-O로 변경
• AWS EKS는 1.22 버전까지도 Runtime으로 Docker 지원

 

2. POD 이슈 사례 소개

구분 상세 설명
CrashLoopBackOff • POD가 시작과 비정상 종료를 연속해서 반복하는 상태
  -> Container 자체의 문제로 정상 기동(Running)이 안되는 상태
  -> Container Log 확인
Pending • POD 스케쥴링(생성)시 필요한 자원이 할당되지 않았을 때의 상태
  -> CPU, Memory 부족으로 스케쥴링할 새 Node가 필요할 때
  -> Mount할 Persistent Volume이 필요할 때
ImagePullBackOff • POD를 실행할 Container Image Pull이 실패 했을 때
  -> Container Image를 Pull할 특정 Registry와의 네트워크 연결 가능 여부 확인
  -> 특정 Registry로의 로그인 혹은 인증을 위한 Secret 등록 확인
Evicted • EKS Worker Node의 용량이 부족시 발생
  -> Node 메모리 용량
  -> Node 디스크(파일시스템) 용량

 

3. POD 로깅 방법 실습

(1) kubectl을 통한 POD 상태 확인
$ kubectl describe <POD명>


(2) EKS POD의 현재 기준 CPU, Memory 사용량 정보 확인
$ kubectl top POD < POD명>

 

(3) EKS POD의 로그 확인(Standard Output)
$ kubectl logs < POD명>

 

(4) Container Insight를 통한 EKS POD 메트릭 모니터링 현황 확인
- AWS CloudWatch > 인사이트 > Container Insights

 

(5) Log Group을 통한 EKS POD 로그 수집 현황 확인
- AWS CloudWatch > 로그 > 로그 그룹 > /aws/containerinsights/<EKS명>/application

 

(6) crictl를 통한 EKS POD 현황 및 상태 확인 (EKS는 적용 불가)
- Kubernetes Worker Node SSH 접속 > crictl 설치후 확인

 

• Open Source Kubernetes의 경우, 1.20 버전 부터 Docker Runtime 사용중단

• 대체할 Runtime으로는 containerd 및 CRI-O를 사용

• CRI-O의 경우 CNCF에서 인큐베이팅 중인 공식 프로젝트임 (https://cri-o.io)

• CRI-O를 사용하려면 반드시 crictl을 사용해야하며, 설치 방법은 아래 링크 참고

https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md

•  AWS EKS의 경우, 1.22버전까지도 Docker를 Runtime으로 사용, cri-o 및 crictl 적용 불가

 

4. POD 이슈 사례 발생시 확인 방법 실습

(1) POD가 CrashLoopBackOff 원인 확인하는 방법
$ kubectl logs <POD명> 
- AWS CloudWatch > 로그 > 로그 그룹 > /aws/containerinsights/<EKS명>/application


(2) POD Pending 문제는 다음의 경로에서 확인 가능
$ kubectl describe <POD명>
$ kubectl top POD <POD명>

 

(3) POD ImagePullBackOff 원인 확인
$ kubectl describe <POD명>


- Registry 로그인 정보를 Secret으로 등록 명령어
$ kubectl create secret generic <Secret명> \
   --from-file=.dockerconfigjson=$HOME/.docker/config.json \
   --type=kubernetes.io/dockerconfigjson

 

- Registry 로그인 정보를 Secret 데이터 확인 명령어
$ kubectl get secret <Secret명> -o yaml


- Deployment 혹은 POD에 Secret Mount 구문 (Manifest 혹은 kubectl edit 적용)

apiVersion: v1
kind: Pod
spec:
  containers:
  - name: private-reg-container
    image: <Container Image명>
  imagePullSecrets:
  - name: <Secret명>

 

(4) POD Evicted 문제 확인
$ kubectl describe <POD명>
$ kubectl top POD <POD명>
- AWS CloudWatch > 인사이트 > Container Insights

반응형