관리 메뉴

miinsun

Gemini CLI로 Kubernetes 운영 돕기 : kube-prometheus-stack+ Alertmanager MCP 연동 실습기 본문

DevOps

Gemini CLI로 Kubernetes 운영 돕기 : kube-prometheus-stack+ Alertmanager MCP 연동 실습기

miinsun 2025. 10. 8. 00:10

0. 시작하며...

현재 쿠버네티스 기반의 모니터링 시스템을 구축·운영하고 있습니다. 최근 Gemini CLI를 활용한 쿠버네티스 운영 사례를 접하게 되었고 K8S 모니터링에도 활용 할 수 있을 것 같아서 실제 적용 가능성을 검토하기 위해 직접 실습을 진행했습니다

실습은 두 가지 흐름으로 진행했습니다.
1. K8S 클러스터에 kube-prometheus-stack을 배포한 뒤 Alertmanager를 MCP로 연동하여 자연어로 Alertmanager 리소스(Event 및 Silence 등)를 생성·수정할 수 있음을 확인했습니다.
2. 알람 이벤트를 해석하고 자동 조치로 이어지는 운영 플로우를 설계해 자연어 질의 → 이벤트 추정/조치 제안 → 이벤트 해소 단계를 검증했습니다.

 

1. Kubernetes 설치

참고자료 - https://velog.io/@eunbyul/AWS-EC2%EC%97%90-kubernetes-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
  • EC2 Spec
    • EC2 3노드(t3.medium 이상 권장, Ubuntu AMI)
      • master 1 (bastion 겸용), worker 2
    • 공인 IP·SSH 접속(PEM 키 필요)
    • Ubuntu Image 기본 계정 : ubuntu.
  • 공통 기본 세팅
    • Docker/Containerd 설치 (공식 문서 권장)
    • kubeadm, kubelet 설치 및 초기화
    • CNI Flannel 적용 (기본 Pod CIDR 10.244.0.0/16과 맞추기)

 

 

  • Kubernetes 통신을 위한 필수 보안 그룹 설정

  • Public IP 할당 후, SSH 접속
    • SSH 접속을 위한 PEM 키 별도 필요
    • ubuntu 이미지 기본 계정은 ubuntu

# 2) Flannel 적용 (10.244.0.0/16과 기본값이 호환)
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# 3) 확인
kubectl -n kube-flannel get pods -o wide
kubectl get nodes -o wide
kubectl get pods -n kube-system

 

2. Gemini CLI 설치

참고 자료 - https://zehonyi21.tistory.com/34
# Python 설치, Node / npm 설치를 위해 필요
$ sudo apt-get install python3

# GCC 및 G++ 설치, Node.js 설치를 위해 필요
$ sudo apt-get install g++-12 gcc-12

# Node.js 및 npm 설치
$ wget https://nodejs.org/dist/latest-v21.x/node-v21.7.3-linux-x64.tar.gz
$ tar -xvf node-v21.7.3-linux-x64.tar.gz
$ sudo cp -r node-v21.7.3-linux-x64/* /usr/local

$ source ~/.bashrc
$ node --version

# Gemini CLI 설치
$ sudo npm install -g @google/gemini-cli

# Gemini CLI 실행
$ gemini

 

 

❌ 인증 오류 대처
Waiting for authentication...
Failed to open browser automatically. Please try running again with NO_BROWSER=true set.
Browser error details: spawn xdg-open ENOENT

> 브라우저 자동 오픈이 안되면:
$ export NO_BROWSER=true

> 브라우저 창에서 로그인 후, 토큰 복사

 

> 복사 한 토큰을 붙여넣어 준다

 

Gemini CLI  & K8S 클러스터 연결 확인 예시

쿠버네티스 서버와 제대로 연동되어 있는지 확인하는 질문을 몇가지하여 확인

Q. 쿠버네티스 default 네임스페이스에 무슨 pod가 있어?

 

Q. 쿠버네티스애서 어떤 CNI, CRI를 쓰고 있어?

   .... kube-system 네임 스페이스를 살피며 클러스터가 어떻게 구성되어 있는지 확인

A. CRI는 containerd를 사용하고 있고, CNI는 Flannel을 사용하고 있습니다.

 

3. 모니터링 스택 설치 (Prometheus + Grafana + Alertmanager)

gemini-cli를 통해 Monitoring Stack 설치를 진행

  • kube-prometheus-stack을 이용해서 Prometheus + Grafana + Alertmanager를 한번에 설치
  • monitoring namespace에 배포

 

외부에서 모니터링 서비스들에 접근하기 위해 NodePort 타입 서비스 추가 배포

  • Prometheus 9090:30090
  • Grafana 3000:30030
  • Alertmanager 9093:30093
# prometheus-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: prometheus-nodeport
  namespace: monitoring
  labels:
    app.kubernetes.io/component: prometheus
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: prometheus
  ports:
    - name: http-web
      port: 9090
      targetPort: http-web
      nodePort: 30090
  externalTrafficPolicy: Cluster

# grafana-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: grafana-nodeport
  namespace: monitoring
  labels:
    app.kubernetes.io/component: grafana
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: grafana
    app.kubernetes.io/instance: prometheus
  ports:
    - name: http
      port: 3000
      targetPort: 3000
      nodePort: 30030
  externalTrafficPolicy: Cluster
  
# alertmanager-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: alertmanager-nodeport
  namespace: monitoring
  labels:
    app.kubernetes.io/component: alertmanager
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: alertmanager
  ports:
    - name: http-web
      port: 9093
      targetPort: http-web
      nodePort: 30093
  externalTrafficPolicy: Cluster

 

외부 접속 확인 및 Test Alert 고의 발생

 

4. Alertmanager MCP 서버 등록

Alertmanager 서버 MCP 활용을 위해 아래 오픈 소스 활용하였습니다.

  • docker image : ghcr.io/ntk148v/alertmanager-mcp-server:latest
  • README의 Claude Desktop 예제가 Gemini CLI와 동일 구조여서 그대로 응용 가능
 

GitHub - ntk148v/alertmanager-mcp-server: A Model Context Protocol (MCP) server that enables AI assistants to integreate with Pr

A Model Context Protocol (MCP) server that enables AI assistants to integreate with Prometheus Alertmanager - ntk148v/alertmanager-mcp-server

github.com

 

더보기

MCP(Model Context Protocol)란?

MCP는 AI 에이전트(클라이언트)가 외부 시스템(서버/툴)에 안전하고 표준화된 방식으로 접근하도록 해주는 프로토콜
Alertmanager, Git, 파일시스템, PagerDuty 같은 시스템을 도구(tools)로 노출하고, Gemini CLI, Claude Desktop이 그 도구를 활용할 수 있도록 설정한다.

 

  • MCP 클라이언트: AI가 실행되는 측(Gemini CLI, Claude Desktop 등).
  • MCP 서버: 외부 시스템을 로 래핑해 내보내는 프로세스(예: alertmanager-mcp-server).
  • 툴(Tools): 서버가 제공하는 실제 기능 단위(예: listAlerts, createSilence).
  • 리소스(Resources): 읽기 전용 데이터 소스(예: 현재 Alerts 목록/상세)

 

 

> docker 권한 확인 및 image 사용 확인

# 현재 사용자로 docker가 되나 확인
docker run --rm hello-world

# 안 되면 권한 추가
sudo usermod -aG docker $USER
newgrp docker        # 또는 로그아웃/로그인

# 다시 확인 (이제 sudo 없이 가능해야 함)
docker run --rm hello-world

# 예: 노드 공인 IP가 203.0.113.10, NodePort가 30093일 때
export ALERTMANAGER_URL="http://203.0.113.10:30093"

docker run --rm -p 8000:8000 \
  -e ALERTMANAGER_URL="$ALERTMANAGER_URL" \
  ghcr.io/ntk148v/alertmanager-mcp-server:latest

 

> Alertmanager MCP 등록

# ~/.gemini/settings.json 에 alertmanager mcp 정보 추가
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "~/Desktop",
        "~/MyGemini_CLI"
      ]
    },
    "alertmanager": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "ALERTMANAGER_URL",
        "ghcr.io/ntk148v/alertmanager-mcp-server:latest"
      ],
      "env": {
        "ALERTMANAGER_URL": "http://172.31.13.45:30093"
      }
    }
  },
  "security": {
    "auth": {
      "selectedType": "oauth-personal"
    }
  },
  "ui": {
    "theme": "Default"
  }
}

 

AlertManager MCP가 제대로 등록되었는지 확인 합니다.

  • Gemini CLI에서 '/MCP list' 명령어 수행
  • MCP Servers의 상태가 Ready여야함
  • Alertmanager 리소스들의 정보, 상태를 가져오고 정보를 변경 할 수 있습니다.

 

  • Alertmanager MCP를 통해 다음과 같은 질문을 할 수 있습니다.
    • "Show me current alerts"
    • "Filter alerts related to CPU issues"
    • "Get details for this alert"
    • "Create a silence for this alert for the next 2 hours"

 

Critical로 발생된 Alert을 확인하도록 하고, 해결 하도록 시키기

 

 

KubeSchedulerDown Alert이 발생된 이유 확인 및 Gemini CLI를 통해 원인 해결하기

 

5. 마치며...

직접 실습을 해보니 Gemini CLI를 모니터링에 붙여 쓰는 게 생각보다 훨씬 강력하게 느껴졌습니다. AlertManager로 들어온 Alert을 실시간으로 확인하며 발생 원인을 파악하고, 또 바로 해결책을 찾아 조치까지 하는 Flow가 한턴에 이루어지는게 정말 놀랍게 느껴졌습니다. 실제 사내 운영환경에도 이러한 시스템이 도입되게 된다면 대응 시간을 줄이면서도 더 정확하게 작업할 수 있겠다는 생각이 들었습니다.

이번 실습을 계기로 프로젝트를 더 발전시켜보고 싶은 아이디어가 몇 가지 생겼습니다. 우선 Grafana나 OpenTelemetry 같은 다른 MCP Tool들과 연동해서 더 넓은 범위의 데이터를 보고 분석과 조치까지 자연스럽게 연결해보고 싶습니다. 
또 더 나아가 Slack 같은 메신저로 Alert을 받은 뒤 Gemini가 제안한 해결책을 클릭 한 번으로 실행하는 ChatOps 환경을 구현해 보는 것도 재밌을 것 같습니다. 퇴근 후 틈틈히 gemini cli를 배워봐야겠습니다 ㅎㅎ
Comments