티스토리 뷰
Development/Docker & Kubernetes (K8s)
[Kubernetes/k8s] kubernetes logs 데이터는 어디에 저장될까 ?
KimDoubleB 2021. 9. 3. 16:03쿠버네티스에서 파드를 만들었다하자. 해당 파드에서는 특정 컨테이너가 stdout을 통해 logging을 한다.
그럼 보통 해당 파드의 로그를 확인하고 싶을 때, 아래의 명령어를 사용한다.
kubectl logs <pod-name>
좀 더 상세히 보자면, Spring boot container 였다면 아래와 같이 나왔을 것이다.
$ kubectl logs <pod_name>
Calculating JVM memory based on 14121456K available memory
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -Xmx13524609K -XX:MaxMetaspaceSize=84846K -XX:ReservedCodeCacheSize=240M -Xss1M (Total Memory: 14121456K, Thread Count: 250, Loaded Class Count: 12566, Headroom: 0%)
Adding 129 container CA certificates to JVM truststore
Spring Cloud Bindings Enabled
Picked up JAVA_TOOL_OPTIONS: -Djava.security.properties=/layers/paketo-buildpacks_bellsoft-liberica/java-security-properties/java-security.properties -agentpath:/layers/paketo-buildpacks_bellsoft-liberica/jvmkill/jvmkill-1.16.0-RELEASE.so=printHeapHistogram=1 -XX:ActiveProcessorCount=10 -XX:MaxDirectMemorySize=10M -Xmx13524609K -XX:MaxMetaspaceSize=84846K -XX:ReservedCodeCacheSize=240M -Xss1M -Dorg.springframework.cloud.bindings.boot.enable=true
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.5)
사용법을 보면 알다시피 docker logs 명령어와 유사하다.
- docker logs 명령어에 대해 궁금하다면 docker logs 데이터는 어디에 저장될까 ? 글을 참조하자.
결국엔 docker, kubernetes 둘 다 logs command를 사용해 로그를 확인할 수 있다.
근데, 드는 궁금증이 있었다. 도대체 로그는 어디다 저장하고 있는걸까? 어디에 저장되어 있는 로그를 불러와 보여주는 걸까?
Log 찾기
Kubernetes에서 pod log는 pod가 실행중인 Node에 저장된다.
- 저장위치는 /var/log/pods/{namespace}_{pod_name}/{container-name}/{count-number}.log 이다.
- 하지만 위 위치로 접속하면 각 파드에 따라 디렉토리별로 나뉘어져 저장되어 보기가 힘들다. 그래서 이러한 로그들의 연결파일들을 모아놓은 곳이 있다. /var/log/containers 에 가면 모든 pod에 대한 로그파일들이 {pod_name}_{namespace}_{container-name}.log 형태로 존재한다.
그럼 직접 Node에 접속해야하는데 어떻게 접속할 수 있을까?
- kubernetes dashboard, k8s lens 등을 통해 쉽게 node에 shell로 접속할 수 있다.
- 이들의 원리는 권한이 있는 컨테이너(previleged containers)를 실행시켜 해당 컨테이너로 실행하는 것이다.
같은 방식으로 kubectl로도 접속할 수 있다. 바로 node-shell를 사용하는 것이다.
- node-shell이 기본적으로 제공되진 않고, krew를 통해 설치해야 한다.
# krew를 먼저 설치한다.
$ brew install krew
# krew에 kvaps를 추가한다.
$ kubectl krew index add kvaps https://github.com/kvaps/krew-index
# node-shell을 설치한다.
$ kubectl krew install kvaps/node-shell
node-shell을 통해 접속하는 방법은 다음과 같다.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready control-plane,master 20h v1.20.2
node2 Ready <none> 20h v1.20.2
node3 Ready <none> 20h v1.20.2
$ kubectl node-shell {node-name}
spawning "nsenter-3ygjn6" on "node-name"
If you don't see a command prompt, try pressing enter.
root@node-name:/#
root@node-name:/# ls
Release.key boot dev etc kic.txt lib lib64 media opt root sbin sys usr
bin data docker.key home kind lib32 libx32 mnt proc run srv tmp var
이제 log 파일이 존재하는지 확인해보자.
root@node-name:/# cd var/log/containers
root@node-name:/var/log/containers# ls
coredns-74ff55c5b-6p7vc_kube-system_coredns-da5fd16a92bd31298288333f4effff35a804fe8c810799742fc47d1434113df6.log
etcd-minikube_kube-system_etcd-e840f70648fccd6c81f07f544e0eb5f0e27b3902aef75062eff821b8af4830de.log
kindnet-zqc7s_kube-system_kindnet-cni-5060084d429ef12e403e4d43e945ff124acb0f86d01ea3a1eab7c4bca4848ba4.log
kindnet-zqc7s_kube-system_kindnet-cni-6fe0cf89e35863d7de0ae0617ee5e046d86bb1e367078807300f6c0e1631d53e.log
kube-apiserver-minikube_kube-system_kube-apiserver-c269aede5d8f94802db0bc7548860a8abd5113a924173c87277bd35b7c15c255.log
kube-apiserver-minikube_kube-system_kube-apiserver-f66a574b3ff823a26c5dbf91a05b7d6646cfffb9de59b6e03439b9013d84eb8e.log
kube-controller-manager-minikube_kube-system_kube-controller-manager-b36ab534f78f8ed7b02e2dc0d6527109171e06c8a967bb892a7cc95d40c4e97f.log
kube-proxy-bswct_kube-system_kube-proxy-8a0c093e22e609468b0e6396b24ac3b22082d7917493cc7243694c0d369931aa.log
kube-scheduler-minikube_kube-system_kube-scheduler-6ca13782db8910cca0b25f1f5f5eeebd76ded46b4a2d35dd221fc5b641f59e74.log
nsenter-3ygjn6_default_nsenter-fa9db0aaf8d18c3483fae86b9cdb721e6557e2601a21590fee71cf39494be642.log
storage-provisioner_kube-system_storage-provisioner-62a113409ee00f7f1fb2a13861bd55445fc7b95f318e3db8872e5c7abc6e41ba.log
storage-provisioner_kube-system_storage-provisioner-f2717be54582d524567c9462c851e4a1633345807222f7918152251218121fb5.log
- kubernetes core component pod에 대한 로그들도 존재한다. 해당 노드는 master node여서 직접 만든 pod가 존재하지 않는데, pod가 있는 노드라면 해당 pod log들이 존재할 것이다.
320x100
반응형
'Development > Docker & Kubernetes (K8s)' 카테고리의 다른 글
[Helm] 2. Helm 차트 만들기 - 내장 객체/변수주입 우선순위/사용자 정의 변수 (0) | 2021.10.01 |
---|---|
[Helm] 1. Helm 바로 사용해보기 (0) | 2021.10.01 |
[Docker] docker logs 데이터는 어디에 저장될까 ? (MacOS) (1) | 2021.09.03 |
[Kubernetes/k8s] Logging Architecture (0) | 2021.08.10 |
Docker & Kubernetes - bash로 접속하기 (0) | 2021.08.09 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Istio
- 비동기
- 로그
- container
- gradle
- Intellij
- Log
- 알고리즘
- tag
- Spring
- MySQL
- Spring boot
- docker
- python
- HTTP
- boj
- jasync
- Algorithm
- java
- 백준
- hexagonal architecture
- 하루
- k8s
- Clean Architecture
- c++
- WebFlux
- Kubernetes
- 쿠버네티스
- 일상
- 클린 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함