기록

K3s 기반 멀티 노드 클러스터 구축기 (3) - kube-ops-view로 노드/파드 상태 시각화하기 본문

DevOps

K3s 기반 멀티 노드 클러스터 구축기 (3) - kube-ops-view로 노드/파드 상태 시각화하기

zyin 2025. 4. 15. 12:00

시작하면서

이번 글에서는 K3s 마스터와 에이전트 노드 구성이 완료된 상태에서, 클러스터의 노드 및 파드 상태를 실시간으로 시각화하는 오픈소스 도구 kube-ops-view를 설치하고 활용하는 방법을 설명한다. Grafana를 사용할 수도 있지만, kube-ops-view는 경량이며 NodePort로 노출하기에 적합해 프리티어 환경에서 간편하게 운영할 수 있는 대시보드 도구이다.

 

이전글

목표

  • kube-ops-view를 마스터 노드(K3s 서버)에서 설치한다.
  • 클러스터 전체 노드와 파드 상태를 실시간으로 시각화한다.
  • 외부에서 웹 브라우저로 접근 가능하도록 NodePort 서비스로 설정한다.

kube-ops-view 소개

kube-ops-view는 Kubernetes 클러스터의 노드와 파드 상태를 실시간으로 시각화해주는 웹 기반 대시보드 도구이다. 각 노드는 박스로 표현되며, 노드 안에는 어떤 파드가 배치되어 있는지, 파드의 상태가 어떤지 한눈에 확인할 수 있다. 클러스터 운영 중 파드가 스케줄되는 위치나 자원 분포를 빠르게 파악하고 싶은 경우 유용하다.

이 도구는 다음과 같은 장점이 있다:

  • 설치가 간단하다 (Deployment + Service만 구성하면 바로 사용 가능)
  • 경량 리소스 기반으로 작동한다 (Prometheus, Grafana 설치 없이도 충분)
  • NodePort 서비스로 외부 노출이 쉬움
  • 실시간 반응형 UI로 노드와 파드의 상태를 직관적으로 표시한다

Grafana 같은 고급 모니터링 툴은 설정이 복잡하거나 리소스가 많이 필요한 반면, kube-ops-view는 학습 목적이나 소규모 클러스터 운영에 최적화되어 있다.


설치 방법

1. Namespace 및 권한 생성

kubectl create namespace kube-ops-view

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-ops-view
  namespace: kube-ops-view
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-ops-view
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kube-ops-view
    namespace: kube-ops-view
EOF

2. Deployment 및 Service 생성

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-ops-view
  namespace: kube-ops-view
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-ops-view
  template:
    metadata:
      labels:
        app: kube-ops-view
    spec:
      serviceAccountName: kube-ops-view
      containers:
        - name: kube-ops-view
          image: hjacobs/kube-ops-view:latest
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: kube-ops-view
  namespace: kube-ops-view
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  selector:
    app: kube-ops-view
EOF

기본적으로 LoadBalancer 타입으로 생성된 경우 외부 IP가 <pending> 상태로 남을 수 있으므로, NodePort로 변경하여 EC2의 퍼블릭 IP + 포트 조합으로 접근하는 방식을 사용한다.


🌐 외부에서 접근하기

  1. 마스터 노드의 퍼블릭 IP를 확인한다.
curl ifconfig.me
  1. Service의 NodePort 포트를 확인한다:
kubectl get svc -n kube-ops-view

 

예시 출력:

kube-ops-view   NodePort   10.40.10.20   <none>        80:32000/TCP   2m28s
  1. 웹 브라우저에서 다음 주소로 접속한다: 예: http://<마스터 노드 공인 IP>:32000


🧩 팁: 마스터 노드에만 배포 강제하기

kube-ops-view가 dev/prd 계정의 에이전트 노드에 스케줄되면 외부 접근이 되지 않을 수 있다. 이 경우, 다음과 같이 노드 셀렉터 설정을 통해 마스터 노드에만 배포되도록 강제할 수 있다:

spec:
  template:
    spec:
      nodeSelector:
        kubernetes.io/hostname: <Control-Node-Name>

해당 값은 kubectl get nodes -o wide로 확인 가능하다.

 
Comments