본문 바로가기

Kubernetes

[Kubernetes] 로그 관리

반응형

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

 

ElasticSearch를 활용한 Kubernetes 로깅 환경 구성

개요 MSA 환경에서 Telemetry의 중요성은 이미 수많은 포스팅과 수많은 포스터들로 부터 강조되어 왔으며, 이미 많은 자료들을 통해 활용 방안들이 다뤄지고 있다. Telemetry는 로깅, 모니터링, 추적

waspro.tistory.com

 

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