쿠버네티스 관리 대시보드

inuit·2025년 6월 8일

All about 쿠버네티스

목록 보기
16/21
post-thumbnail

최근 업데이트일 2024-11-23

따라하며 배우는 쿠버네티스: 쿠버네티스 관리 대시보드

쿠버네티스: 쿠버네티스 대시보드를 배포하고 접속하기

모니터링을 위한 웹 기반 UI인 쿠버네티스 관리 대시보드와 Prometheus에 대해서 알아보자.

쿠버네티스 관리 대시보드

쿠버네티스 클러스터의 상태를 웹 브라우저 기반 UI로 시각화하고 제어할 수 있는 공식 툴

  • 기능
    • 전체 클러스터 상태를 한눈에 확인 (Pod, Deployment, Node 등)
    • 각 리소스의 상태, 이벤트, 로그 등을 실시간 확인
    • 특정 Pod에서 출력된 로그를 바로 확인 가능

설치

# `kubernetes-dashboard` 네임스페이스에 Dashboard의 Deployment, Service, ConfigMap 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
kubectl get all -n kubernetes-dashboard # 설치 확인

# CluterIP로 배포된 서비스를 외부에서도 접근 가능하도록 NodePort로 수정
kubectl edit service kubernetes-dashboard -n kubernetes-dashboard
# kubernetes-dashboard service
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001  # Any Port (30000~32767)
  • 이후 <Node의 IP>의 해당 포트로 접속한 후, 두 가지 로그인 방식 중 하나를 선택한다.
    • Kubeconfig 방식~/.kube/config 파일 같은 클러스터 접속 설정 파일을 업로드해서 로그인하는 방식이다.
      • 주로 개인 개발 환경에서 사용한다.
    • Token 방식은 ServiceAccount에 할당된 토큰 값을 붙여넣어 로그인하는 방식이다.
      • 클러스터에 직접 접근 권한을 부여한 계정을 만드는 방식이라 보다 안전하고 세밀한 권한 제어가 가능하다.
      • 먼저 ServiceAccount를 접근하고 싶은 리소스의 범위에 따라 역할을 생성한다. 모든 리소스를 관리하려면 cluster-admin으로 설정한다.
      • 이후, ServiceAccount와 연결된 인증 토큰을 발급한다. kubectl -n kubernetes-dashboard create token [ServiceAccount_NAME]
# ServiceAccount 생성
kubectl create serviceaccount [ServiceAccount_NAME] -n kubernetes-dashboard
# ClusterRoleBinding 생성
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: [ClusterRoleBinding_NAME]
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin # 관리 범위에 따라 설정
subjects:
- kind: ServiceAccount
  name: [ServiceAccount_NAME]
  namespace: kubernetes-dashboard
  
# Secret 생성 If you want to manage in Long-term
apiVersion: v1
kind: Secret
metadata:
  name: [Secret_NAME_Connected_To_ServiceAccount]
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: [ServiceAccount_NAME]
type: kubernetes.io/service-account-token
  • create token 방식은 토큰이 쿠버네티스 API 서버에서 임시 JWT 발급하기 때문에, 장기간 사용하려면 Secret 기반 토큰을 사용해야 한다.
kubectl -n kubernetes-dashboard describe secret [Secret_NAME_Connected_To_ServiceAccount]

단순 상태 표시를 넘어 메트릭 기반 모니터링과 '사용자' 계정 관리 기능을 위해 Prometheus를 사용한다.


프로메테우스 (prometheus)

오픈소스 모니터링 및 경고 도구로, 시계열 데이터베이스와 강력한 쿼리 언어(PromQL)를 사용하여 메트릭을 수집하고 분석한다.

  • 기능
    • CPU, Memoty, Network IO, Disk IO 등의 Metric을 모니터링 할 수 있다.
    • 대시보드 도구(e.g. Grafana)와 통합하여 시각화할 수 있다.
    • Alert와 Ruleset을 만들어 모니터링 데이터를 기반으로 자동으로 경고를 보낼 수 있다.

  • 구성요소
    • Prometheus Server
      • Retrieval: 대상(Target)에서 메트릭을 pull하여 수집
      • Storage: 시계열 메트릭 데이터를 TSDB(Time Series DB) 형태로 저장
      • HTTP server: 웹 UI, API, Grafana 등 외부 요청 처리
    • Prometheus Targets & Exporters
      • Target: Prometheus가 모니터링할 대상 (e.g. Pod, Node, App, VM 등)
        • Prometheus가 pull 요청을 보내는 실제 엔드포인트
        • 여러 Target들을 묶은 것을 Job이라 부른다.
      • Exporter: 각 대상의 메트릭을 표준 포맷으로 변환해주는 중간자 (e.g. node-exporter, kube-state-metrics, cadvisor)
        • 메트릭을 생성해서 HTTP로 노출하는 프로그램
    • Pushgateway
      • short-lived job은 Prometheus가 pull로 데이터를 수집하기 전에 종료될 수 있기 때문에 이런 Job들은 종료 시점에 Pushgateway에 메트릭을 push하고 Prometheus는 Pushgateway를 타겟으로 삼아 pull한다.
    • Service Discovery
      • Prometheus는 타겟을 자동으로 찾기 위해 서비스 디스커버리를 사용한다.
      • 쿠버네티스에서는 kubernetes_sd_config가 Prometheus 설정에서 쿠버네티스 클러스터 내의 리소스들을 자동으로 감지해서 타겟으로 등록한다.
    • Alertmanager
      • Prometheus 내부 규칙에 따라 특정 조건에 도달하면 Alert 생성하고, 이를 Alertmanager가 전파한다.
    • Prometheus Web UI / Grafana
      • Prometheus 자체에도 간단한 Web UI 있지만, 실질적인 시각화는 Grafana로 수행한다.
      • PromQL로 시계열 데이터를 질의하거나, 알람 조건을 정의한다.

설치

Helm으로 손쉽게 kube-prometheus-stack을 설치하는 것이 간편하고 유용하다. (Helm에 대해서는 추후 다룰 것이다.)

  • kube-prometheus-stack은 쿠버네티스 클러스터에서 Prometheus 기반 모니터링 시스템을 한 번에 설치할 수 있는 Helm 차트 모음이다.
    • Prometheus Operator, Prometheus, AlertManager, Grafana 등이 포함되어 있다.
# helm repo에 프로메테우스 커뮤니티 helm-chart를 등록
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# 등록된 repo 정보를 업데이트
helm repo update

# 모니터링을 위한 네임스페이스 생성
kubectl create namespace monitoring
# 프로메테우스 & 그라파나를 설치
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring
# 외부에서 접근 가능하도록 NodePort로 변경 or 포트포워딩 using kubectl port-forward
kubectl edit service -n monitoring prometheus-grafana

Grafana

다양한 메트릭 소스로부터 데이터를 받아 시각화하는 오픈소스 대시보드 플랫폼

  • 그래프, 게이지, 테이블, 차트 등 다양한 형태로 메트릭 시각화
  • Prometheus, Loki, Elasticsearch, MySQL, InfluxDB 등 다양한 소스를 지원
  • 사용자 관리에 용이하고 플러그인을 사용하여 확장할 수 있다.
  • Prometheus는 시계열 데이터를 수집 & 저장하고 Grafana는 Prometheus에 쿼리(PromQL)를 날려 데이터를 가져오는 방식으로 동작한다.
  • 가져온 데이터를 그래프나 차트로 시각화하고, 원하는 Metric에 대해서 대시보드를 구성할 수 있다.
profile
It’s always white night here.

0개의 댓글