CKA를 준비해보자 13일차 - Logging and Monitoring

0

CKA

목록 보기
13/43

Logging and Monitoring

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를 외부로 전달한다. 이 metricsmetrics server에 호환되는 metricscAdvisor가 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가 있을 때 가능하다는 것을 잊지 말도록 하자.

Managing Application Logs

kubernetes상에서 pod의 log를 보기위해서는 kubectl logs를 쓰면된다. 만약 stream으로 계속보고 싶다면 -f옵션을 켜면 된다.

kubectl logs -f event-simulator-pod

그런데 만약, pod에 여러 container가 있으면 어떻게 될까?? 이 경우에는 log를 얻기 위한 container의 이름을 pod뒤에 명시해야한다.

  • event-simulator.yaml
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

0개의 댓글