Pod 로그 관리
1. 전통적인 애플리케이션의 로그 운영
- 애플리케이션이 항상 지정된 장비에서 실행됨을 보장
- logrotate와 같은 system 관리 tool을 이용해서 로그 관리
- 일정시간 로그를 저장하고, 일정시간 후에는 로그를 제거
2. 클러스터 환경에서 로그 운영
- 애플리케이션이 어느 노드에서 실행? 얼마나 많은 자원 사용? 응답속도 및 응답 코드 확인
- 개별 노드에 접근하지 않고 직접 Pod의 로그를 확인할 수 있어야 함
- Pod 로그 확인
kubectl create deployment my-nginx --image nginx:1.14 --port 80 --replicas 2
kubectl expose deployment my-nginx --target-port 80 --prot 80
kubectl get pods -o wide
kubectl get svc
curl <Cluster IP>
kubectl logs <pod name>
※ expose 명령어는 service 생성 명령어
EFK를 Kubernetes Application 로그 관리
- EFK stack은 클러스터 환경에서 로그를 수집, 검색 그리고 시각화를 지원
. 각 클러스터 Node에 fluentd가 daemonset으로 log를 수집한다.
elasticsearch는 fluentd가 수집한 로그를 저장하고, 요청에 따라 검색을 한다.
마지막으로 유저가 용이하게 사용할 수 있도록 kibana로 시각화 한다.
- EFK 구축
. ElasticSearch 구축
. Kibana 구축
. Fluentd 구축
EFK 구축은 아래 링크 참고
https://waspro.tistory.com/762
eks 환경이 아닐 경우 아래와 같이 스토리지 구성하여 진행
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
- ReadOnlyMany
persistentVolumeReclaimPolicy: Recycle
storageClassName: gp2
hostPath:
path: /logdata
노드 서버의 메모리가 부족하면 아래와 같이 pod 상태가 CrashLoopBackOff 를 발생하며 에러 로그가 발생할 수 있으므로 노드 서버에 메모리 여유를 확보 후 진행해야한다.
kubectl get pods -n kube-logging
NAME READY STATUS RESTARTS AGE
elasticsearch-data-0 0/1 CrashLoopBackOff 5 (114s ago) 5m18s
elasticsearch-master-5c498b9465-bhb67 0/1 CrashLoopBackOff 7 (2m53s ago) 15m
kubectl logs elasticsearch-master-5c498b9465-bhb67 -n kube-logging
Defaulted container "elasticsearch-master" out of: elasticsearch-master, increase-vm-max-map (init)
Exception in thread "main" java.lang.RuntimeException: starting java failed with [137]
output:
error:
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:111)
at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:79)
at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:57)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:89)
Stern으로 여러 개의 Pod 로그 확인
1. Stern
- 여러 개 Pod 로그를 실시간 모니터링
- 사이트 : https://github.com/stern/stern
2. Stern 설치 및 Pod 로그 보기
sudo apt install golang -y
go install github.com/kardianos/govendor@latest
go install github.com/stern/stern@latest
export PATH=$PATH:~/go/bin
pod log 보기
stern -n kube-system kube-proxy-*
kubectl create deployment my-nginx --image nginx --replicas 2
kubectl expose deployment my-nginx --target-port 80 --prot 80
kubectl get pods -o wide
kubectl get svc
curl <Cluster IP>
stern my-nginx-*
[참고]
- https://www.youtube.com/watch?v=HyWZSuxwOas&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=36
'Kubernetes' 카테고리의 다른 글
[Kubernetes] pod 직접 접근 방법 (0) | 2023.12.18 |
---|---|
[Kubernetes] pod 삭제 전 로그 확인 명령어 (0) | 2023.12.18 |
[Kubernetes] Horizontal Pod Autoscaling 운영 (0) | 2023.02.11 |
[Kubernetes] Autoscaling (0) | 2023.02.09 |
[Kubernetes] DNS (0) | 2023.02.09 |