-
메트릭서버(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-serverimage: k8s.gcr.io/metrics-server-amd64:v0.3.0args:- --kubelet-insecure-tlsimagePullPolicy: AlwaysvolumeMounts:- name: tmp-dirmountPath: /tmp설정을 변경하고 kubectl apply -f . 으로 yaml 파일들을 클러스터에 배포합니다. 최초로 메트릭이 수집되는데 시간이 좀 걸립니다. 잠시 기다렸다가 kubectl top 으로 CPU/메모리 사용량이 나오는 걸 확인할 수 있습니다.$ kubectl top nodeNAME CPU(cores) CPU% MEMORY(bytes) MEMORY%docker-for-desktop 407m 20% 1727Mi 90%$ kubectl top podNAME CPU(cores) MEMORY(bytes)elasticsearch-65d5c55b95-qvwsh 14m 718Mikibana-5b4c447657-8wq6w 4m 165Mikubernetes-simple-app-57585656fc-rvqdm 0m 1Micurl을 통해서 직접 메트릭서버의 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 gaugemetrics_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 counterprocess_cpu_seconds_total 8.92# HELP process_max_fds Maximum number of open file descriptors.# TYPE process_max_fds gaugeprocess_max_fds 1.048576e+06# HELP process_open_fds Number of open file descriptors.# TYPE process_open_fds gaugeprocess_open_fds 11# HELP process_resident_memory_bytes Resident memory size in bytes.# TYPE process_resident_memory_bytes gaugeprocess_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 gaugeprocess_start_time_seconds 1.53580689462e+09# HELP process_virtual_memory_bytes Virtual memory size in bytes.# TYPE process_virtual_memory_bytes gaugeprocess_virtual_memory_bytes 4.9332224e+07참고
'Kubernetes' 카테고리의 다른 글
쿠버네티스 오토스케일링(kubernetes autoscaling) (0) 2018.09.12 쿠버네티스 모니터링 : 프로메테우스(kubernetes monitoring : phrometheus) (2) 2018.09.10 쿠버네티스 모니터링 아키텍처(kubernetes monitoring architecture) (0) 2018.09.03 쿠버네티스 모니터링 : 힙스터(kubernetes monitoring : heapster) (0) 2018.09.03 쿠버네티스 대시보드(kubernetes dashboard) (3) 2018.08.31 댓글