miinsun
Gemini CLI로 Kubernetes 운영 돕기 : kube-prometheus-stack+ Alertmanager MCP 연동 실습기 본문
Gemini CLI로 Kubernetes 운영 돕기 : kube-prometheus-stack+ Alertmanager MCP 연동 실습기
miinsun 2025. 10. 8. 00:100. 시작하며...
현재 쿠버네티스 기반의 모니터링 시스템을 구축·운영하고 있습니다. 최근 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.
- EC2 3노드(t3.medium 이상 권장, Ubuntu AMI)
- 공통 기본 세팅
- Docker/Containerd 설치 (공식 문서 권장)
- kubeadm, kubelet 설치 및 초기화
- CNI Flannel 적용 (기본 Pod CIDR 10.244.0.0/16과 맞추기)

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

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

- 3개의 모두 kubernetes 설치를 위한 기본 세팅 필요
- docker 설치 https://docs.docker.com/engine/install/ubuntu/
- kubelet, kubeadm 설치, 클러스터 만들기 (공식 문서 참고 : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/?utm_source=chatgpt.com)
- CNI Flannel 설치
# 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를 배워봐야겠습니다 ㅎㅎ