kubernetes cluster를 운영하다보면 pod의 memory, cpu 사용량, node의 총 갯수, 전체 cluster에서 사용하고 있는 자원량 등 다양한 metric이 필요할 때가 있다.
이러한 metric정보들을 관리하여 cluster 정보를 사용자에게 제공해주는 server가 바로 metrics server
이다. metrics server
는 cluster 당 한개로 되어있으며 metrics
를 정제하고 모아주어, metrics
를 memory에 저장해준다. 단, metrics server
는 추가적인 component이기 때문에 cluster에 별도로 설치해주어야 한다.
주의할 것은 metrics server
는 in-memory solution이기 때문에 disk에 metrics를 저장하지 않는다.
그런데 어떻게 metrics server
가 pod들로부터 metrics정보들을 가져올 수 있는 것일까??
각 master node를 포함한 모든 node에는 kubelet
이 존재하여 pod의 container를 관리하고, kube-apiserver와 통신하여 data를 주고 받는다. kubelet
내부에는 cAdvisor
라는 component가 있는데, 이 component는 pod로부터 performance metrics들을 불러내고, 이를 kubelet API 사용하여 metrics를 외부로 전달한다. 이 metrics
는 metrics server
에 호환되는 metrics
로 cAdvisor
가 pod정보들을 감시하여 제공하는 것이다.
----------------
|metrics server|
----------------
|
|
(metrics)
|
|
------Node1---------|----------------
| -------kubelet--------- |
| | | | |
| | ---cAdvisor--- | |
| | | metrics | | |
| | -------------- | |
| ----------------------- |
| | | |
| (metrics) (metrics) |
| | | |
| ---pod1--- ---pod2--- |
| | | | | |
| ---------- ---------- |
-------------------------------------
다음과 같이 kubelet
안의 cAdvisor
가 pod에 대한 metrics정보들을 kubelet api를 통해서 metrics server에 제공해주는 것이다.
metrics-server
를 배포하는 방식은 다음과 같다.
git clone https://github.com/kubernetes-incubator/metrics-server.git
kubectl create -f deploy/1.8+/
일단 설치되면 각 kubernetes resource들로부터 data를 받아 정제한 다음 metrics로 만들어 cluster관리자에게 제공해준다.
kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
kubemaster 166m 8% 1337Mi 70%
kubenode1 36m 1% 1046Mi 55%
kubemaster 39m 1% 1048Mi 55%
이외에 kubectl top pod
도 가능하다. 단, kubectl top
명령어는 언제나 metrics server
가 있을 때 가능하다는 것을 잊지 말도록 하자.
kubernetes상에서 pod의 log를 보기위해서는 kubectl logs
를 쓰면된다. 만약 stream
으로 계속보고 싶다면 -f
옵션을 켜면 된다.
kubectl logs -f event-simulator-pod
그런데 만약, pod에 여러 container가 있으면 어떻게 될까?? 이 경우에는 log를 얻기 위한 container의 이름을 pod뒤에 명시해야한다.
apiVersion: v1
kind: Pod
metadata:
name: event-simulator-pod
spec:
containers:
- name: event-simulator
image: kodekloud/event-simulator
- name: image-processor
image: some-image-processor
다음과 같이 event-simulator-pod
는 두 container로 이루어져 있는데, 만약 event-sumulator
에 대한 log를 보고 싶다면 다음과 같이 kubectl logs
명령어를 사용해야한다.
kubectl logs -f event-simulator-pod event-simulator