티스토리 뷰

반응형

쿠버네티스에서 파드를 만들었다하자. 해당 파드에서는 특정 컨테이너가 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
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함