嗨大家,我是 Debuguy。
前幾天我們處理了 Grafana 和 Kibana 的警報自動分析,讓 Bot 能自動查 Log、解析錯誤。但說實話,生產環境的問題往往不會只停留在「查個 Log」這麼簡單。
想像一下這個場景:
📱 凌晨 3:17
🚨 [CRITICAL] Pod CrashLoopBackOff
Production namespace 有 Pod 一直重啟
@debuguy @on-call-team
你爬起來,開始標準流程:
# 第一步:看看是哪個 Pod
kubectl get pods -n production
# 第二步:看詳細資訊
kubectl describe pod problem-pod-xxx -n production
# 第三步:看 Log
kubectl logs problem-pod-xxx -n production --tail=100
# 第四步:看 Events
kubectl get events -n production --sort-by='.lastTimestamp'
每次都要打這麼多指令,而且還要記得各種參數、namespace、資源名稱...
「如果能直接問 Bot:『幫我看看 production 那個一直重啟的 Pod 是怎麼回事』該有多好...」
kubectl-ai 是 Google Cloud Platform 開源的工具,它能:
我們已經有了:
但缺了最後一塊拼圖:Kubernetes 本身的操作。
kubectl-ai 官方沒有提供現成的 Docker image,但提供了 Dockerfile。我們需要自己 build。
先 clone kubectl-ai 專案:
git clone https://github.com/GoogleCloudPlatform/kubectl-ai.git
cd kubectl-ai
官方提供的 Dockerfile 在 images/kubectl-ai/Dockerfile
,我們可以直接使用:
docker build -t kubectl-ai:latest -f images/kubectl-ai/Dockerfile .
在 docker-compose.yml
中加入 kubectl-ai 服務:
services:
# ... 其他服務 (genkit-service, slack-service, etc.)
kubectl-ai-mcp:
image: kubectl-ai:latest
container_name: kubectl-ai-mcp
ports:
- "9080:9080"
volumes:
# 掛載 kubeconfig (read-only)
- ~/.kube:/root/.kube:ro
command: [
"--mcp-server",
"--mcp-server-mode", "streamable-http",
"--http-port", "9080"
]
restart: unless-stopped
重點說明:
--mcp-server
: 啟動 MCP server 模式--mcp-server-mode streamable-http
: 使用 streamable-http transport--http-port 9080
: 設定 HTTP 埠http://localhost:9080/mcp
「等等,這樣會不會讓 AI 可以任意操作 K8s?」
是的!這是個重要的安全問題。所以給予的權限必須控制在 read only
更新 config/mcp-config.json
:
{
"mcpServers": {
"elasticsearch": {
"type": "streamable-http",
"url": "http://elasticsearch-mcp:8080/mcp"
},
"grafana": {
"type": "streamable-http",
"url": "http://grafana-mcp:8000/mcp"
},
"kubectl-ai": {
"type": "streamable-http",
"url": "http://kubectl-ai-mcp:9080/mcp"
}
}
}
啟動服務:
docker-compose up -d kubectl-ai-mcp
測試 MCP endpoint:
# 用 MCP Inspector 測試
npx @modelcontextprotocol/inspector
現在可以在 Slack 中測試:
@debuguy_bot 列出 default namespace 的所有 pods
kubectl-ai 本身沒有內建的 read-only 模式,需透過 Kubernetes RBAC 來限制權限。
根據官方文件,kubectl-ai 內建的工具包括:
@debuguy_bot production namespace 有個 Pod 一直重啟,幫我看看是什麼問題
Bot 會自動:
🚨 [CRITICAL] High Memory Usage
production/api-server Pod 記憶體使用率超過 90%
@debuguy_bot 幫我分析這個問題
Bot 會:
kubectl-ai 每次操作都會呼叫 K8s API。要注意:
在 System Prompt 提醒 AI:
- Use specific resource names when possible
- Avoid broad "get all" commands across all namespaces
- Prefer targeted queries
監控 API calls:用 Langfuse 追蹤工具呼叫頻率
今天我們成功把 kubectl-ai 整合到 ChatBot 架構中:
技術整合:
實用價值:
安全性:
從查 Log 到查 Metrics 再到查 K8s 資源,Bot 現在真的可以做完整的問題診斷了。
當凌晨警報響起時,Bot 能:
工程師只需要根據報告決定下一步,而不用在半夢半醒中敲一堆指令。
完整的原始碼在這裡,包含 kubectl-ai Dockerfile 和完整配置!
AI 的發展變化很快,目前這個想法以及專案也還在實驗中。但也許透過這個過程大家可以有一些經驗和想法互相交流,歡迎大家追蹤這個系列。
也歡迎追蹤我的 Threads @debuguy.dev