ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿠버네티스 모니터링 : metrics-server (kubernetes monitoring : metrics-server)
    Kubernetes 2018. 9. 7. 09:00
    메트릭서버(metrics-server) 개념
    쿠버네티스의 메트릭 수집 모니터링 아키텍처에서 코어메트릭 파이프라인 쪽을 가볍게 하기 위해서 힙스터를 deprecated시키고 그 다음으로 쿠버네티스에서 모니터링 표준으로 도입하려고 하는건 메트릭서버(metrics-server)입니다.
    메트릭서버는 힙스터를 간소화한 버전이라고 생각하면 됩니다. kubelet에서 메트릭데이터를 수집해서 메모리에 저장하고 있습니다. 또한 apiserver를 통해 포드나 노드의 메트릭을 조회하는데 사용되는 메트릭 API(Metrics API)를 제공해 줍니다. 쿠버네티스에서 필요한 핵심 데이터들은 대부분 etcd에 저장되지만 메트릭 데이터들을 etcd에 저장하면 etcd의 부하가 너무 커지기 때문에 그렇게 하지 않고 메모리에 저장하도록 되어 있습니다. 데이터를 메모리에 저장하기 때문에 메트릭서버용으로 실행한 포드가 재시작하거나 하면 수집됐던 데이터가 사라집니다. 그래서 데이터 보관주기를 길게 가져가려면 별도의 외부 스토리지를 사용하도록 설정해야 합니다. 

    메트릭서버 실행하기
    메트릭서버를 실행하는건 다음 GitHub 저장소에서 https://github.com/kubernetes-incubator/metrics-server deploy 디렉토리에 있는 yaml파일들을 사용하면됩니다. 도커용 쿠버네티스에서 메트릭서버를 사용하기 위해서는 수정해줘야할 부분이 있습니다. metrics-server-deployment.yaml파일의 컨테이너 설정에  args 옵션 --kubelet-insecure-tls 을 추가해 주어야 합니다. 쿠버네티스 클러스터에서 사용하는 인증서가 공인증서가 아니라 커스텀 인증서이기 때문에 커스텀 인증서때문에 보안에러가 나지 않도록 무시하는 옵션입니다.
          - name: metrics-server
            image: k8s.gcr.io/metrics-server-amd64:v0.3.0
            args:
              - --kubelet-insecure-tls
            imagePullPolicy: Always
            volumeMounts:
            - name: tmp-dir
              mountPath: /tmp

    설정을 변경하고 kubectl apply -f . 으로 yaml  파일들을 클러스터에 배포합니다. 최초로 메트릭이 수집되는데 시간이 좀 걸립니다. 잠시 기다렸다가 kubectl top 으로 CPU/메모리 사용량이 나오는 걸 확인할 수 있습니다.
    $ kubectl top node
    NAME                 CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%
    docker-for-desktop   407m         20%       1727Mi          90%
    $ kubectl top pod
    NAME                                     CPU(cores)   MEMORY(bytes)
    elasticsearch-65d5c55b95-qvwsh           14m          718Mi
    kibana-5b4c447657-8wq6w                  4m           165Mi
    kubernetes-simple-app-57585656fc-rvqdm   0m           1Mi


    curl을 통해서 직접 메트릭서버의 api로 요청을 해볼수도 있습니다. 메트릭서버로 요청을 할 수 있게 다음처럼 포트 포워딩 설정을 합니다. 
    kubectl port-forward svc/metrics-server -n kube-system 30443:443

    쿠버네티스 API를 이용하도록 되어 있기 때문에 인증정보가 필요합니다. 다음처럼 default 계정의 TOKEN 정보를 얻어서 curl 요청을 하면 사용가능한 API목록을 확인할 수 있습니다.
    $ TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d ' ‘)
    $ curl -k -H "Authorization: Bearer $TOKEN" https://localhost:30443/
    {
      "paths": [
        "/apis",
        "/apis/metrics.k8s.io",
        "/apis/metrics.k8s.io/v1beta1",
        "/healthz",
        "/healthz/healthz",
        "/healthz/ping",
        "/healthz/poststarthook/generic-apiserver-start-informers",
        "/metrics",
        "/openapi/v2",
        "/swagger-2.0.0.json",
        "/swagger-2.0.0.pb-v1",
        "/swagger-2.0.0.pb-v1.gz",
        "/swagger.json",
        "/swaggerapi",
        "/version"
      ]
    }%

    메트릭 정보를 확인하기 위해서 /metrics 를 호출하면 메트릭 관련정보가 나오는걸 확인할 수 있습니다.
    curl -k -H "Authorization: Bearer $TOKEN" https://localhost:30443/metrics
    ……
    # TYPE metrics_server_scraper_last_time_seconds gauge
    metrics_server_scraper_last_time_seconds{source="kubelet_summary:docker-for-desktop"} 1.535815717e+09
    # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
    # TYPE process_cpu_seconds_total counter
    process_cpu_seconds_total 8.92
    # HELP process_max_fds Maximum number of open file descriptors.
    # TYPE process_max_fds gauge
    process_max_fds 1.048576e+06
    # HELP process_open_fds Number of open file descriptors.
    # TYPE process_open_fds gauge
    process_open_fds 11
    # HELP process_resident_memory_bytes Resident memory size in bytes.
    # TYPE process_resident_memory_bytes gauge
    process_resident_memory_bytes 2.2048768e+07
    # HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
    # TYPE process_start_time_seconds gauge
    process_start_time_seconds 1.53580689462e+09
    # HELP process_virtual_memory_bytes Virtual memory size in bytes.
    # TYPE process_virtual_memory_bytes gauge
    process_virtual_memory_bytes 4.9332224e+07




    참고


    댓글

Designed by Tistory.