04. [실습] POD 로깅 및 이슈 사례 조치방법
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