
管理 Kubernetes,大多數人會使用 kubectl 或開啟 Dashboard。
然而,若能透過聊天的方式管理 K8s,是否會更直覺、更便利?
本文將示範如何將 KubeWizard 打造成可在 LINE 上操作的 Kubernetes 管理助理:
透過此方式,你無須開啟終端機,在通勤、外出或休息時即可完成許多維運工作。
以下是此模式能帶來的主要價值:
KubeWizard 可同時提供 REST API,可整合各種事件來源,例如:
支援以插件形式擴充工具,例如:
前往 LINE Developers:
https://developers.line.biz/console/
建立 Provider
建立 Messaging API Bot
取得 Channel 設定並寫入 .env:
LINE_CHANNEL_SECRET=你的_channel_secret LINE_CHANNEL_ACCESS_TOKEN=你的_access_token
https://your-domain.com/linebot/callback
Webhook 測試可使用 ngrok 進行本地公開。
| 項目 | 設定值 | 
|---|---|
| Webhook URL | https://example.com/linebot/callback | 
| Use webhook | ✅ 啟用 | 
需使用 HTTPS。成功後請點擊 Verify 確認。
預設的 KubeWizard 屬於一次性查詢工具:問一句、答一句。
欲提升可用性,需將其調整為具備記憶能力、工具判斷與多入口能力的 Agent。
| 元件 | 功能 | 
|---|---|
| Agent | 分析訊息與決策是否使用 Tools | 
| Tools | 以插件形式提供功能(K8s、Pipeline、AI 等) | 
| Memory | 使用 Redis 儲存上下文與使用者狀態 | 
每項功能獨立為 Tool,具有高擴充性:
class K8sTool(BaseTool):
    name = "k8s_pods"
    description = "查詢 Kubernetes Pods"
    def run(self, namespace: str):
        return kube_client.list_pods(namespace)
Agent → 分析訊息 → 選擇 Tool → 執行 → 回傳結果
使用 Redis 儲存對話上下文,使 Bot 能理解前後語意:
from langchain_community.chat_message_histories import RedisChatMessageHistory
chat_history = RedisChatMessageHistory(
    url="redis://localhost:6379/0",
    session_id=user_id,
    key_prefix="chat_history",
    ttl=3600
)
messages = chat_history.messages
chat_history.add_message(new_message)
KubeWizard 使用 Kubernetes Python SDK 操作叢集,而非呼叫 kubectl 指令。
優點:
Python SDK 在 Pod 內與外部皆可使用:
| 運行環境 | 載入方式 | 用途 | 
|---|---|---|
| 叢集內(Pod) | load_incluster_config() | 正式部署與權限控管 | 
| 外部(本地/VM) | load_kube_config() | 開發與測試 | 
自動偵測範例:
from kubernetes import client, config
import os
def load_k8s_config():
    if os.path.exists("/var/run/secrets/kubernetes.io/serviceaccount/token"):
        config.load_incluster_config()
    else:
        config.load_kube_config()
load_k8s_config()
flowchart LR
    User[使用者(LINE)] <--> LINEWebhook[LINE Webhook]
    LINEWebhook --> FastAPI[FastAPI 入口]
    FastAPI --> Agent[KubeWizard Agent]
    Agent <--> Redis[(Redis - 記憶與上下文)]
    Agent --> K8s[Kubernetes API]
以下為建議的最小必要權限。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kubewizard-bot-role
  namespace: default
rules:
  - apiGroups: [""]
    resources: ["pods", "services", "endpoints", "events", "configmaps", "secrets", "persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
  - apiGroups: ["apps"]
    resources: ["deployments", "replicasets", "statefulsets", "daemonsets"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
  - apiGroups: ["batch"]
    resources: ["jobs", "cronjobs"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
  - apiGroups: ["networking.k8s.io"]
    resources: ["ingresses", "networkpolicies"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
使用者輸入:
「幫我看一下 kube-system 裡的 Pods」
流程:
你: 幫我看 default namespace 的 Pods
Bot: 共 12 個 Pods(3 個 Running、1 個 CrashLoopBackOff…)需看 Logs 嗎?
你: 看一下剛剛那個 Crash 的 Log
Bot: (顯示 Logs 並提供可能原因)
你: 幫我重啟看看
Bot: 已重啟 Deployment payment-service,更新後狀態回報中。  
本文示範如何將 KubeWizard 整合至 LINE Bot,打造出可管理 K8s 的聊天式助理,具備: