Kubernetes Agent Guide

제목 : Kubernetes Agent Guide
작성자 : WhaTap Support
이메일 : support@whatap.io
날짜 : 2021-04-21
버전 : 1.0

설명 : 본 문서는 WhaTap Kubernetes Monitoring 에이전트에 대해 설명합니다.

1. 개요

와탭 쿠버네티스 에이전트 지원 환경, 구성, 자원 정보에 대해 설명합니다.

1.1. 지원 환경

1.1.1. 클라우드

  • AWS EKS

  • GCP GKE

  • Azure AKS

  • 네이버 클라우드 플랫폼 쿠버네티스 서비스

1.1.2. 쿠버네티스

  • Kubernetes

  • OpenShift

1.1.3. 지원 컨테이너 런타임

  • Docker

  • CRI-O

  • Containerd

쿠버네티스에서 지원하는 컨테이너 런타임을 기본으로 지원 합니다.

1.2. 와탭 쿠버네티스 모니터링 에이전트 구성

와탭 쿠버네티스 모니터링은 whatap-monitoring이라는 네임스페이스를 생성해 마스터 에이전트, 노드 에이전트를 생성합니다.

Table 1. 마스터 에이전트 정보
에이전트명 유형 Replicas Request CPU Request Memory Limit CPU Limit Memory PVC

whatap-master-agent

Deployment

1

300m

100Mi

350m

200Mi

200Mi

위 Request / Limit CPU와 Memory는 기본 값이며 환경에 따라 자원 증설이 필요할 수 있습니다. 증설 방법은 4.에이전트 증설 에서 확인할 수 있습니다.

1.2.1. 마스터 에이전트

마스터 에이전트는 쿠버네티스 API와 통신하여 쿠버네티스의 각종 정보들을 수집하여 와탭 수집 서버로 전송하거나 노드 에이전트에서 필요로 하는 정보들을 제공합니다. 마스터 에이전트는 whatap 이름의 ServiceAccount를 통해 아래와 같은 ClusterRole이 Bind 됩니다.

Table 2. ClusterRole 정보
유형 apiGroups Resource verbes

ClusterRole

전체(*)

  • namespaces

  • pods

  • pods/log

  • configmaps

  • services

  • endpoints

  • daemonsets

  • ingress

  • deployments

  • node

  • persistentvolumes

  • persistentvolumeclaims

  • events

  • replicaset

  • roles

  • rolebinding

  • clusterroles

  • clusterrolebinding

  • jobs

  • cronjobs

  • statefulsets

  • serviceaccounts

  • storageclasses

  • horizontalpodautoscalers(*옵션)

  • get

  • list

  • watch

ClusterRole

None

  • pods/exec

  • create

권한을 임의로 변경하거나 제거할 경우 관련 기능이 정상적으로 작동하지 않을 수 있습니다.
마스터 에이전트는 기본으로 200MiB이상의 PVC 마운트가 필요합니다. Default StorageClass가 없을 경우 별도로 PV를 생성해야 합니다.
horizontalpodautoscalers은 기본으로 설정되지 않으며 관련 데이터 수집을 하려면 별도로 추가해야합니다.

1.2.2. 노드 에이전트

노드 에이전트는 DaemonSet으로 각 노드에 하나씩 생성되며 컨테이너, 노드 정보를 수집합니다.

Table 3. 노드 에이전트 정보
에이전트명 유형 Replicas Request CPU Request Memory Limit CPU Limit Memory PVC

whatap-node-agent

Daemonset

노드 당 1개

300M

100Mi

350M

200Mi

None

위 Request / Limit CPU와 Memory는 기본 값이며 단일 노드에 작동중인 컨테이너 수에 따라 자원 증설이 필요할 수 있습니다. 증설 방법은 4.에이전트 증설 에서 확인할 수 있습니다.

2. 와탭 쿠버네티스 모니터링

WhaTap Kubernetes Monitoring Guide

와탭 쿠버네티스 모니터링 서비스는 단일 클러스터를 대상으로 다수의 네임스페이스 및 포드/컨테이너를 프로젝트로 그룹화하여 관리합니다.

쿠버네티스 프로젝트는 1개의 마스터(Kubenetes) 프로젝트와 다수의 네임스페이스(Namespace) 프로젝트로 구성됩니다.

  • 마스터 프로젝트 - 쿠버네티스 클러스터 내의 모든 자원 정보를 모니터링 하기 위한 프로젝트로 본 프로젝트를 통해 마스터 에이전트와 노드 에이전트 설치를 진행합니다.

  • 네임스페이스 프로젝트 - 쿠버네티스 클러스터의 네임스페이스 단위로 모니터링을 수행하기 위한 프로젝트로 네임스페이스 단위의 자원 모니터링 및 애플리케이션 컨테이너의 모니터링을 수행하기 위한 프로젝트 입니다. 본 프로젝트를 통해 마이크로 에이전트의 설치를 진행합니다.

WhaTap Kubernetes Monitoring Project List
Figure 1. WhaTap Kubernetes Monitoring Project List

2.1. 설치 절차

마스터(Kubernetes) 프로젝트 생성 → 쿠버네티스 에이전트 설치 → 네임스페이스(Namespace) 프로젝트 생성

2.1.1. 마스터(Kubernetes) 프로젝트 생성

와탭 콘솔의 프로젝트 그룹에서 프로젝트 생성 버튼을 누릅니다.

Click Button to Create Kubernetes Project
Figure 2. Click Button to Create Kubernetes Project

쿠버네티스 아이콘 선택 후 각 입력란에 해당하는 정보를 입력하고 저장 버튼을 눌러 프로젝트를 추가합니다.

Create Kubernetes Project
Figure 3. Create Kubernetes Project

신규 생성한 쿠버네티스 모니터링 프로젝트를 선택하면 에이전트 설치 화면이 나타납니다. 프로젝트 관리 | 에이전트 설치 메뉴를 통해서도 확인 가능합니다.

에이전트 설치 절차는 쿠버네티스 환경 모니터링을 위한 마스터 및 노드 에이전트 설치와 애플리케이션 에이전트 설치의 두 가지 과정으로 진행됩니다.

2.1.2. 마스터 / 노드 에이전트 설치

설치 안내 페이지에 안내된 흐름을 따라 마스터 및 노드 에이전트의 설치 과정을 진행합니다.

Install Master and Node Agents
Figure 4. Install Master and Node Agents
라이선스 발급

설치 페이지에 존재하는 "라이선스키를 생성해 주세요." 밑에 있는 버튼을 클릭하여 라이선스를 발급받습니다.

사전 환경 점검 및 설정

쿠버네티스 환경에 따라 사전 환경 설정을 필요로 하는 케이스가 존재합니다.

Istio 를 적용한 환경일 경우

하기 명령을 실행하여 Istio 환경 모니터링에 필요한 자원을 생성합니다.

kubectl create namespace whatap-monitoring
kubectl label namespace whatap-monitoring istio-injection=enabled
kubectl apply -f - <
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
    name: whatap-external
spec:
    hosts:
    - whatap-proxy1
    - whatap-proxy2
    addresses:
    - "설치 안내 페이지 참고"
    - "설치 안내 페이지 참고"
    ports:
    - name: proxy
      number: 6600
      protocol: tcp
    location: MESH_EXTERNAL
EOF
GKE 환경일 경우

GKE 클러스터 생성후 아래 명령을 통해 권한 설정을 수행합니다.

#GKE 권한설정
ACCOUNT=$(gcloud info --format='value(config.account)')
kubectl create clusterrolebinding owner-cluster-admin-binding \
    --clusterrole cluster-admin \
    --user $ACCOUNT
gcloud 명령 설치는 https://cloud.google.com/sdk/install 를 참조하세요.
OpenShift 환경일 경우

설치 안내 화면 상에서 openshift_scc.yaml 파일을 다운로드 하고, 하기 명령을 통해 설치합니다.

oc create -f whatap_openshift_scc.yaml
쿠버네티스 에이전트 설치

Container Runtime에 맞는 yaml을 다운로드 합니다.

Amazon, Google, Azure, 혹은 설치형 쿠버네티스에서 Container Runtime을 별도로 지정하지 않으신 경우 Docker yaml을 다운로드 합니다.

Container Runtime을 지정하신 경우 해당 yaml을 다운로드 합니다.

Install Master and Node Agents
Figure 5. Download Master and Node Agent YAML file

다운로드 한 YAML 파일로 에이전트 Pod를 생성합니다.

kubectl -f whatap_kube.yaml apply

와탭 마스터 에이전트와 노드 에이전트를 정상적으로 생성하였는지 확인합니다.

kubectl get pod -n whatap-monitoring
NAME                                  READY   STATUS    RESTARTS   AGE
whatap-master-agent-cb769958c-tclkl   1/1     Running   0          5d
whatap-node-agent-8p8vk               1/1     Running   0          5d
whatap-node-agent-cj8jb               1/1     Running   0          5d
whatap-node-agent-d94fj               1/1     Running   0          5d
whatap-node-agent-l42sf               1/1     Running   0          5d
whatap-node-agent-mkppb               1/1     Running   0          5d
whatap-node-agent-pdwlr               1/1     Running   0          5d
whatap-node-agent-zf6bv               1/1     Running   0          5d

마스터 및 노드 에이전트의 설치가 완료되면 쿠버네티스 환경의 자원 모니터링이 시작되므로 대시보드 메뉴를 통해 자원 모니터링 여부를 확인합니다.

후속 작업으로 애플리케이션 모니터링을 위한 에이전트 설치를 수행합니다.

2.1.3. 에이전트 업데이트

에이전트 업데이트가 필요한 경우 아래 명령을 실행합니다.

와탭 마스터 에이전트 업데이트

kubectl set image deployment/whatap-master-agent whatap-master-agent=whatap/kube_mon:{원하는 버전} -n whatap-monitoring

와탭 노드 에이전트 업데이트

kubectl set image daemonset/whatap-node-agent whatap-node-agent=whatap/kube_mon:{원하는버전} -n whatap-monitoring

2.1.4. 네임스페이스(Namespace) 프로젝트 생성

쿠버네티스 프로젝트 목록에 표시되는 미생성 상태의 네임스페이스 프로젝트 카드를 클릭하여 Namespace 프로젝트를 생성합니다.

Create Namespace Project
Figure 6. Create Namespace Project

2.1.5. 애플리케이션 에이전트 설치

마이크로 애플리케이션 에이전트의 설치는 와탭의 "애플리케이션 모니터링"의 설치 절차와 동일하나 컨테이너라이징 작업이 수반됩니다.

설치 안내 페이지에 안내된 흐름을 따라 마스터 및 노드 에이전트의 설치 과정을 진행합니다.

Install Micro Application Agents
Figure 7. Install Micro Application Agents
라이선스 발급

설치 페이지에 존재하는 "라이선스키를 생성해 주세요." 밑에 있는 버튼을 클릭하여 라이선스를 발급받습니다.

마스터 프로젝트의 라이선스 키와 네임스페이스 프로젝트의 라이선스 키는 동일하지 않으므로, 이후 절차에 본 프로젝트에서 발급한 라이선스 키각 적용되도록 주의합니다.

3. Kubernetes 컨테이너 환경 APM 설치

애플리케이션 에이전트의 설치는 와탭의 "애플리케이션 모니터링"의 설치 절차와 동일하나 컨테이너라이징 작업이 수반됩니다.

애플리케이션 에이전트가 탑재된 Docker Image를 기반으로 Pod가 구동되면, 애플리케이션 모니터링이 시작됩니다.

하기 설치 과정은 Docker를 기반으로 설명됩니다.

3.1. JAVA APM 설치

Java APM 컨테이너라이징

아래의 설치 과정은 docker로 구동될 java application의 JVM Option에 에이전트 적용을 위한 옵션을 추가하고, docker container 이미지를 패키징 하는 과정을 설명합니다. 자세한 설명과 라이센스, 아이피 정보 등은 각 네임스페이스 프로젝트에 관리 - 에이전트 설치 페이지에서 확인할 수 있습니다.

1
Figure 8. 에이전트 설치 페이지
애플리케이션의 Dockerfile이 있는 디렉토리에 whatap.conf 파일 생성
  • 도커 빌드 디렉토리 생성 합니다.

 mkdir -p {Docker build Dir}
  • whatap.conf 파일을 생성합니다.

 cat >{Docker build Dir}/whatap.conf <
 whatap.server.host={아이피주소}
 EOL
아이피 주소는 에이전트 설치 페이지에서 확인할 수 있습니다.
Dockerfile에 와탭 java apm 에이전트 파일 추가 명령어 등록

아래 두 가지 중 선호하는 방법으로 java apm 에이전트 파일을 이미지 내에 복사합니다.

도커 허브의 와탭 에이전트 설치용 공식 이미지로부터 에이전트 복사 하는 방법
 RUN mkdir -p /whatap           # 와탭 에이전트용 디렉토리를 사용자 컨테이너에 생성
 COPY --from=whatap/kube_mon /data/agent/micro/whatap.agent.kube.jar /whatap  # 와탭 JAVA 에이전트를 사용자 컨테이너에 복사
 COPY ./whatap.conf /whatap/    # 생성한 whatap.conf 설정 파일을 사용자 컨테이너에 복사

도커 이미지 내에 whatap.agent.kube.jar 파일이 없을 경우 java apm agent 버전이 무엇인지 아래 명령어를 통해 확인해야합니다.

docker run whatap/kube_mon ls /data/agent/micro

결과 예시

whatap-server:~ whatap$ docker run whatap/kube_mon ls /data/agent/micro
whatap.agent-2.0_06.jar
whatap.agent-2.0_20.jar
whatap.agent-2.0_34.jar
whatap.agent.kube.jar
whatap.prepare.sh
에이전트 파일을 직접 받아 COPY 하는 방법

설치 안내 페이지의 다운로드 버튼으로 받은 파일의 압축을 풀어 이미지 내에 복사합니다.

RUN mkdir -p /whatap           # 와탭 에이전트용 디렉토리를 사용자 컨테이너에 생성
COPY whatap.agent-*.jar /whatap  # 와탭 JAVA 에이전트를 사용자 컨테이너에 복사
COPY ./whatap.conf /whatap/    # 생성한 whatap.conf 설정 파일을 사용자 컨테이너에 복사
javaagent 옵션 추가
스크립트로 애플리케이션을 기동할 경우

스크립트에 다음 내용을 추가합니다.

WHATAP_HOME=/whatap
WHATAP_JAR=ls ${WHATAP_HOME}/whatap.agent-*.jar | sort | tail -1
export JAVA_OPTS="-javaagent:${WHATAP_JAR} -Dwhatap.micro.enabled=true "
Dockerfile 명령어로 애플리케이션을 기동할 경우

Dockerfile 애플리케이션 기동 명령어에 다음 내용을 추가합니다.

 -javaagent:/whatap/whatap.agent-#.#.#.jar -Dwhatap.micro.enabled=true

Dockerfile 예시

FROM openjdk:8-jdk-slim
RUN mkdir -p /app && mkdir /whatap
WORKDIR /app
COPY --from=whatap/kube_mon /data/agent/micro/whatap.agent-*.jar /whatap
COPY whatap.conf /whatap
COPY myApp.jar /app/
CMD ["java","-javaagent:/whatap/whatap.agent-2.0_20.jar","-Dwhatap.micro.enabled=true",”-jar”,"/app/myApp.jar"]
EXPOSE 8080
Docker 빌드

이미지를 빌드합니다.

 cd docker
 docker build -t $Image_Name .
Kubernetes의 컨테이너 환경 변수 설정

애플리케이션 에이전트에서 필요로 하는 환경 변수 정보를 입력합니다.

OKIND 환경 변수는 Pod에 해당하는 애플리케이션들을 그룹화 합니다. Deployment 이름으로 설정 시 Deployment에 해당 하는 Pod들을 하나로 그룹화 합니다.

env:
  - name: NODE_IP
    valueFrom: {fieldRef: {fieldPath: status.hostIP}}
  - name: NODE_NAME
    valueFrom: {fieldRef: {fieldPath: spec.nodeName}}
  - name: POD_NAME
    valueFrom: {fieldRef: {fieldPath: metadata.name}}
  - name: OKIND
    value: "{업무 종류 이름 또는 Deployment 이름}"
  - name: license
    value: "{애플리케이션이 소속된 네임스페이스 프로젝트의 라이센스 키 값}"
OKIND는 Deployment name 또는 ReplicaSet name으로 지정하길 권장합니다.
와탭 에이전트가 설치된 도커 이미지로 배포

위와 같은 설정이 끝나면 설치가 완료된 이미지로 배포합니다.

APM 에이전트 설정 파일 관리

컨테이너 환경에 설치된 와탭 APM 에이전트 옵션을 적용, 관리할 수 있는 방법은 3 가지가 있으며 기호에 맞게 사용할 수 있습니다.

같은 설정이 다른 방식으로 중복 설정되었을 경우 아래 우선 순위로 설정 가지게 됩니다.

컨테이너 파일 시스템 내의 whatap.conf 파일 → 각 옵션 환경 변수 → whatap.env 환경 변수

APM 에이전트 설정은 애플리케이션

도커 빌드에서 추가된 whatap.conf 를 업데이트

도커 빌드 과정에서 추가한 whatap.conf에 필요한 설정을 업데이트한 후 도커 이미지 빌드하고 배포합니다.

도커 이미지에 업데이트 후 빌드 배포 하는 방식은 권장하지 않습니다. 도커 빌드에 추가되는 whatap.conf는 whatap.server.host 값만 설정된 상태로 추가하는 것을 권장합니다.
환경 변수로 설정 하는 방식

Pod의 yaml env에 필요한 에이전트 설정을 아래와 같이 환경 변수로 생성하여 설정할 수 있습니다.

... 중략 ...
env:
- name: NODE_IP
  valueFrom: {fieldRef: {fieldPath: status.hostIP}}
  ... 중략 ...
- name: profile_http_header_enabled
  value: "true"
- name: profile_sql_param_enabled
  value: "true"
- name: profile_basetime
  value: 300
... 중략 ...
ConfigMap을 설정 파일에 마운트 하는 방식

ConfigMap을 생성해 와탭 APM 에이전트에 필요한 설정들을 입력한 후 와탭 APM 에이전트가 설치된 곳에 마운트 합니다.

JAVA APM 설정 파일 ConfigMap 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: front.conf
  namespace: whatap-dev-multi
data:
  whatap.conf: |
    license=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    whatap.server.host=xx.xx.xx.xx
    tx_caller_meter_enabled=true
    stat_mtrace_enabled=true
    actx_meter_enabled=true
    sql_dbc_meter_enabled=true
    httpc_host_meter_enabled=true
    profile_sql_param_enabled=true

Yaml 볼륨 마운트 예시

...중략
volumeMounts:
- name: whatap-conf                   # Volume 이름
  mountPath: /data/agent/whatap.conf  # 컨테이너 이미지에 설치된 에이전트 경로
  subPath: whatap.conf                # 컨테이너 이미지에 설치된 에이전트 설정 파일 이름
volumes:
- name: whatap-conf                   # Volume 이름
  configMap:
    name: whatap.conf                 # ConfigMap 이름
ConfigMap 단일 환경 변수에 에이전트 설정 값들을 넣어 관리하는 방식

JAVA APM 설정 파일 ConfigMap 예시

apiVersion: v1
kind: ConfigMap
metadata:
  name: whatap.conf
data:
  whatap.env: |-
    license=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    whatap.server.host=xx.xx.xx.xx
    tx_caller_meter_enabled=true
    stat_mtrace_enabled=true
    actx_meter_enabled=true
    sql_dbc_meter_enabled=true
    httpc_host_meter_enabled=true
    profile_sql_param_enabled=true

Yaml env 예시

env:
- name: NODE_IP
  valueFrom: {fieldRef: {fieldPath: status.hostIP}}
- name: NODE_NAME
  valueFrom: {fieldRef: {fieldPath: spec.nodeName}}
- name: POD_NAME
  valueFrom: {fieldRef: {fieldPath: metadata.name}}
- name: OKIND
  value: "{업무 종류 이름 또는 Deployment 이름}"
- name: license
  value: "{애플리케이션이 소속된 네임스페이스 프로젝트의 라이센스 키 값}"
envFrom:
  - configMapRef:
      name: whatap.conf

3.2. PYTHON APM 설치

Python 애플리케이션 컨테이너 라이징

하기 설치 과정은 docker로 구동될 python application에 와탭 모니터링을 적용하고, docker container 이미지를 패키징 하는 과정을 설명합니다.

와탭 에이전트 설치
  • 파이썬 애플리케이션 도커 이미지 빌드시 whatap-python 패키지를 설치합니다.

    FROM python:3.7
    ...
    RUN pip3 install --upgrade whatap-python
    ...
에이전트 설정

파이썬 애플리케이션 시작시 와탭 에이전트가 Injection할 수 있도록 애플리케이션 시작 스크립트를 변경합니다.

설정 파일 및 로그 출력 디렉토리를 환경변수 WHATAP_HOME으로 설정합니다.

export WHATAP_HOME=/whatap_conf

설정파일을 생성합니다.

whatap-setting-config\
--host 13.124.11.223/13.209.172.35\
--license xxxxxxxxxxxxxxxxxxxxxxxx\
--app_name [애플리케이션 이름]\
--app_process_name [애플리케이션 프로세스 이름]
권한 문제가 발생하는 경우
  • 와탭 설정을 위한 $WHATPA_HOME/whatap.conf 파일의 읽기 및 쓰기 권한

  • 와탭 로그를 위한 $WHATPA_HOME/logs 디렉토리와 하위 파일의 읽기 및 쓰기 권한

다음과 같이 $WHATPA_HOME에 권한을 부여합니다.

echo `sudo chmod -R 777 $WHATAP_HOME`
에이전트 적용

루트 디렉토리의 node.js 애플리케이션에 다음과 같은 코드를 추가 해 주세요.

var WhatapAgent = require('whatap').NodeAgent;
Kubernetes 환경변수 및 볼륨

트랜잭션에서 NODE 및 POD정보를 수집하기 위해 NODE_IP, NODE_NAME, POD_NAME을 환경변수로 설정합니다. 와탭 설정파일 및 로그파일용 휘발성 볼륨을 탑재합니다.

env:
  - name: NODE_IP
    valueFrom: {fieldRef: {fieldPath: status.hostIP}}
  - name: NODE_NAME
    valueFrom: {fieldRef: {fieldPath: spec.nodeName}}
  - name: POD_NAME
    valueFrom: {fieldRef: {fieldPath: metadata.name}}

whatap.conf 파일을 사용하지 않을 경우에 추가 설정을 해주면 됩니다.

  - name: license
    value: "..."
  - name: whatap_server_host
    value: "설치 페이지 확인 필요"
  - name: whatap_micro_enabled
    value: "true"
와탭 에이전트가 설치된 도커 이미지로 배포

3.3. NODE.JS APM 설치

Node.js 애플리케이션 컨테이너 라이징

하기 설치 과정은 docker로 구동될 node.js application에 와탭 모니터링을 적용하고, docker container 이미지를 패키징 하는 과정을 설명합니다.

와탭 에이전트 설치
  • 다음 명령어를 통해 whatap을 설치합니다.

    npm install --save whatap
  • 업데이트 시에는 다음 명령어를 활용합니다.

    npm update whatap
에이전트 설정

node_modules/whatap에 있는 whatap.conf 파일을 node.js 애플리케이션 루트 디렉토리로 복사하고,

복사한 whatap.conf 파일의 내용을 "에이전트 설치" 페이지에 표시되는 내용으로 교체합니다.

license=...
whatap.server.host=...
whatap_micro_enabled=true
에이전트 적용

루트 디렉토리의 node.js 애플리케이션에 다음과 같은 코드를 추가 해 주세요.

var WhatapAgent = require('whatap').NodeAgent;
Kubernetes 환경변수 및 볼륨

트랜잭션에서 NODE 및 POD정보를 수집하기 위해 NODE_IP, NODE_NAME, POD_NAME을 환경변수로 설정합니다. 와탭 설정파일 및 로그파일용 휘발성 볼륨을 탑재합니다.

env:
  - name: NODE_IP
    valueFrom: {fieldRef: {fieldPath: status.hostIP}}
  - name: NODE_NAME
    valueFrom: {fieldRef: {fieldPath: spec.nodeName}}
  - name: POD_NAME
    valueFrom: {fieldRef: {fieldPath: metadata.name}}

whatap.conf 파일을 사용하지 않을 경우에 추가 설정을 해주면 됩니다.

  - name: license
    value: "..."
  - name: whatap_server_host
    value: "설치페이지 확인 필요"
  - name: whatap_micro_enabled
    value: "true"
와탭 에이전트가 설치된 도커 이미지로 배포

4. 쿠베네티스 GPU 모니터링

와탭 쿠버네티스 GPU 모니터링 환경, 구성, 자원 정보에 대해 설명합니다.

4.1. 개요

와탭 쿠버네티스 GPU 모니터링은 Nvidia GPU 성능을 수집합니다. Nvidia DCGM Exporter를 와탭 노드 에이전트 POD 에 sidecar 로 동시 작동합니다. 와탭 노드 에이전트는 DCGM Exporter 의 메트릭을 실시간 및 시계열로 수집하여 저장합니다.

4.2. 지원 환경

4.2.1. GPU 종류

  • Nvidia GPU

4.2.2. 외부 모듈

4.2.3. 수집 정보

Table 4. Category : container_gpu
메트릭 비고

DCGM_FI_DEV_DEC_UTIL

gauge, Decoder utilization (in %)

DCGM_FI_DEV_ENC_UTIL

gauge, Encoder utilization (in %)

DCGM_FI_DEV_FB_FREE

gauge, Framebuffer memory free (in MiB).

DCGM_FI_DEV_FB_USED

gauge, Framebuffer memory used (in MiB).

DCGM_FI_DEV_GPU_TEMP

gauge, GPU temperature (in C).

DCGM_FI_DEV_GPU_UTIL

gauge, GPU utilization (in %).

DCGM_FI_DEV_MEM_CLOCK

gauge, Memory clock frequency (in MHz).

DCGM_FI_DEV_MEM_COPY_UTIL

gauge, Memory utilization (in %).

DCGM_FI_DEV_POWER_VIOLATION

counter, Throttling duration due to power constraints (in us).

DCGM_FI_DEV_SM_CLOCK

gauge, SM clock frequency (in MHz).

DCGM_FI_DEV_THERMAL_VIOLATION

counter, Throttling duration due to thermal constraints (in us).

DCGM_FI_DEV_XID_ERRORS

gauge, Value of the last XID error encountered.

4.2.4. 적용 방법

  • 와탭 쿠버네티스 모니터링 에이전트 설치 안내 페이지에서 GPU를 선택 후 yaml파일을 다운로드 할 수 있습니다.

  • 다운 받은 yaml에는 아래 사항을 확인 할 수 있습니다.

  • Nvidia DCGM Exporter를 위한 설정

apiVersion: v1
kind: ConfigMap
metadata:
  name: dcgm-exporter-csv
  namespace: whatap-monitoring
data:
  whatap-gpu.csv: |-
    DCGM_FI_DEV_SM_CLOCK,  gauge, SM clock frequency (in MHz).
    DCGM_FI_DEV_MEM_CLOCK, gauge, Memory clock frequency (in MHz).
    DCGM_FI_DEV_MEMORY_TEMP, gauge, Memory temperature (in C).
    DCGM_FI_DEV_GPU_TEMP,    gauge, GPU temperature (in C).
    DCGM_FI_DEV_POWER_USAGE,              gauge, Power draw (in W).
    DCGM_FI_DEV_TOTAL_ENERGY_CONSUMPTION, counter, Total energy consumption since boot (in mJ).
    DCGM_FI_DEV_GPU_UTIL,      gauge, GPU utilization (in %).
    DCGM_FI_DEV_MEM_COPY_UTIL, gauge, Memory utilization (in %).
    DCGM_FI_DEV_ENC_UTIL,      gauge, Encoder utilization (in %).
    DCGM_FI_DEV_DEC_UTIL ,     gauge, Decoder utilization (in %).
    DCGM_FI_DEV_XID_ERRORS,            gauge,   Value of the last XID error encountered.
    DCGM_FI_DEV_POWER_VIOLATION,       counter, Throttling duration due to power constraints (in us).
    DCGM_FI_DEV_THERMAL_VIOLATION,     counter, Throttling duration due to thermal constraints (in us).
    DCGM_FI_DEV_FB_FREE, gauge, Framebuffer memory free (in MiB).
    DCGM_FI_DEV_FB_USED, gauge, Framebuffer memory used (in MiB).
  • Nvidia DCGM Exporter Sidecar

        - name: "dcgm-exporter"
          image: "nvcr.io/nvidia/k8s/dcgm-exporter:2.1.8-2.4.0-rc.3-ubuntu18.04"
          env:
            - name: "DCGM_EXPORTER_LISTEN"
              value: ":9400"
            - name: "DCGM_EXPORTER_KUBERNETES"
              value: "true"
            - name: "DCGM_EXPORTER_COLLECTORS"
              value: "/etc/dcgm-exporter/whatap-dcgm-exporter.csv"
          ports:
            - name: "metrics"
              containerPort: 9400
          securityContext:
            runAsNonRoot: false
            runAsUser: 0
          volumeMounts:
            - name: "pod-gpu-resources"
              readOnly: true
              mountPath: "/var/lib/kubelet/pod-resources"
            - name: "whatap-dcgm-exporter-csv"
              readOnly: true
              mountPath: "/etc/dcgm-exporter/whatap-dcgm-exporter.csv"
              subPath: whatap-gpu.csv

5. Kubernetes 로그 모니터링

쿠버네티스 로그 모니터링은 워커 노드 상의 임의의 로그 파일의 증분을 주기적으로 업로드하는 기능입니다.

업로드는 whatap-node-agent 모듈이 담당하며 아래 옵션으로 적용할 수 있습니다.

'NOTE: whatap-node-agent는 워커 노드의 파일 시스템을 hostpath 기능으로 /rootfs에 마운트 하여 로그모니터링 합니다.'

로그파일 지정
watchlog.{로그아이디}.enabled=true
watchlog.{로그아이디}.file=/rootfs/파일경로

파일 경로에는 날짜 패턴(strftime.org 참조) 및 *(wildcard)가 포함될 수 있습니다.

지정한 로그 아이디는 로그 탐색기의 Category에서 watchlog_{로그아이디}로 찾을 수 있습니다.

ConfigMaps node-start-script syslog 모니터링 예
apiVersion: v1
kind: ConfigMap
metadata:
  name: node-start-script
  namespace: whatap-monitoring
data:
  entrypoint.sh: |-
    #!/usr/bin/env bash

    cat >/whatap_conf/whatap.node.conf <<EOL
    ...
    watchlog.syslog.enabled=true
    watchlog.syslog.file=/rootfs/var/log/messages
    ...