免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Aiops探索:基于 Dify + Kubernetes MCP Server 的智能运维实践

发布日期:2025-11-11 16:10:22 浏览次数: 1530
作者:阿铭linux

微信搜一搜,关注“阿铭linux”

推荐语

探索AI与Kubernetes的完美结合,打造高效智能运维解决方案。

核心内容:
1. 基于Dify和K8s MCP Server的智能运维架构设计
2. Kubernetes MCP Server的部署与配置实战
3. 预置工具集的应用与运维自动化实现

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

研究Aiops有一段时间了,目前手里有不少可落地的方案了,接下来会把这些方案全部整理到我的大模型课程里。

今天的案例是基于dify和K8s的MCP来做一个运维智能体。


一、架构和思路

核心理念

1)Dify (大脑):负责理解用户的自然语言指令,进行任务规划,并决定调用哪个工具。
2)Kubernetes MCP Server (桥梁):作为一个实现了 MCP (Model Context Protocol) 的标准工具集,它将复杂的 Kubernetes API 调用封装成简单、安全的工具,供 Dify 调用。
3)Kubernetes (执行层):接收并执行来自 MCP Server 的指令,管理集群资源。

架构图

Kubernetes MCP Server
这玩意目前开源的有不少,我找了一个适合我需求的。地址是:https://github.com/Manusa/kubernetes-mcp-server。

它预置了21个实用的 Kubernetes 操作工具,例如:pods_get, nodes_get, deployments, resource_list, pods_log, pods_exec, nodes_top, pods_top等。使用这个现成的 Server,我们无需编写任何后端代码,只需专注于部署和集成。


二、MCP部署与配置

步骤 1: 准备 Kubernetes 环境

这里假设已经有了一个可用的 Kubernetes 集群,并且kubectl命令行工具已配置好,可以访问该集群。

步骤 2: 部署 Kubernetes MCP Server

思路是:先通过源码编译docker镜像,然后部署到k8s集群里

1、克隆代码

git clone https://github.com/containers/kubernetes-mcp-server.gitcd kubernetes-mcp-server

2、编译容器镜像

docker build -t kubernetes-mcp-server:latest .

3、将镜像导入到所有k8s节点

说明:1. 这是临时方案,最好是将镜像放到你们的私有镜像仓库中; 2. 假设你的k8s环境用的是containerd容器进行时

# 导出镜像docker save kubernetes-mcp-server:latest -o k8s-mcp.tar
# 拷贝到各 nodescp k8s-mcp.tar root@node01:/tmp/
# 在 node 上加载进 containerdctr -n k8s.io images import /tmp/k8s-mcp.tar
# 检查是否导入成功ctr -n k8s.io images ls | grep kubernetes-mcp

4、部署mcp的k8s yaml文件

涉及:ServiceAccountRoleRoleBinding 、Deployment和Service

apiVersion: v1kind: Namespacemetadata:  name: mcp-tools---apiVersion: v1kind: ServiceAccountmetadata:  name: k8s-mcp-server-sa  namespace: mcp-tools---# 授予最小权限原则 (Principle of Least Privilege)# 我们只授予读取、描述和日志查看权限,避免任何破坏性操作apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRole # 使用 ClusterRole 以便跨命名空间查询metadata:  name: k8s-mcp-server-rolerules:- apiGroups: [""]  resources: ["pods", "nodes", "services", "namespaces", "events"]  verbs: ["get", "list", "watch"]- apiGroups: [""]  resources: ["pods/log"]  verbs: ["get"]- apiGroups: [""]  resources: ["pods/exec"]  verbs: ["create"]- apiGroups: ["apps"]  resources: ["deployments", "replicasets", "daemonsets", "statefulsets"]  verbs: ["get", "list", "watch"]- apiGroups: ["extensions"]  resources: ["deployments", "replicasets", "daemonsets"]  verbs: ["get", "list", "watch"]- apiGroups: ["metrics.k8s.io"]  resources: ["pods", "nodes"]  verbs: ["get", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:  name: k8s-mcp-server-rolebindingsubjects:- kind: ServiceAccount  name: k8s-mcp-server-sa  namespace: mcp-toolsroleRef:  kind: ClusterRole  name: k8s-mcp-server-role  apiGroup: rbac.authorization.k8s.io---apiVersion: apps/v1kind: Deploymentmetadata:  name: kubernetes-mcp-server  namespace: mcp-tools  labels:    app: kubernetes-mcp-serverspec:  replicas: 1  selector:    matchLabels:      app: kubernetes-mcp-server  template:    metadata:      labels:        app: kubernetes-mcp-server    spec:      serviceAccountName: k8s-mcp-server-sa      containers:      - name: server        # 使用自己编译的镜像         image: kubernetes-mcp-server:latest        imagePullPolicy: IfNotPresent        # 该镜像默认使用集群内配置,无需额外参数        # 如果需要指定 kubeconfig,可以添加 args 和 volume        # args: ["--kubeconfig", "/etc/kubeconfig/config"]        # volumeMounts:        # - name: kubeconfig        #   mountPath: /etc/kubeconfig        #   readOnly: true      # volumes:      # - name: kubeconfig      #   secret:      #     secretName: kubeconfig-secret---apiVersion: v1kind: Servicemetadata:  name: kubernetes-mcp-server  namespace: mcp-toolsspec:  selector:    app: kubernetes-mcp-server  type: NodePort  ports:  - name: http    port: 8080          # Pod 内部端口    targetPort: 8080    nodePort: 30080
这样可以通过k8s任意一个节点的30080端口访问到k8s的mcp服务端

步骤 3: 在 Dify 中配置 MCP 工具

在 Dify 的界面中,进入工具 → MCP,点击 “添加MCP服务”。

在配置中填写:

1)服务端点URL:http://<host>:30080/sse(这里host地址就是你k8s节点的IP地址)

2)名称、服务器标识:k8s_mcp

3)认证,这需要获取前面创建的ServiceAccount用户的Token

先进入mcp的pod里

POD_NAME=$(kubectl get pods -n mcp-tools -l app=kubernetes-mcp-server -o jsonpath='{.items[0].metadata.name}')kubectl exec -it $POD_NAME -n mcp-tools -- sh

进到pod里,再查看token

cat /var/run/secrets/kubernetes.io/serviceaccount/token
注意请求值的格式: Bearer Token

点击“添加并授权”

可以看到,目前包含21个工具。


三、构建智能体

1、在Dify创建Agent应用

2、设置提示词

你是一个经验丰富的 Kubernetes 运维专家。你的任务是帮助用户查询和诊断 Kubernetes 集群的状态。请根据提供给你的工具来选择具体的任务,比如查看命名空间的工具就是namespaces_list,查看节点日志的工具是nodes_log。你完全可以根据工具的名称来推测其用途。请遵循以下工作流程:1.  **理解意图**:仔细分析用户的请求,明确他们想做什么。2.  **收集参数**:如果用户没有提供必要的参数(如 `namespace`, `pod_name`),请主动询问。例如,如果用户说“看看 web 服务的日志”,你需要问:“请告诉我 web 服务所在的命名空间和 Pod 名称?”3.  **调用工具**:根据收集到的信息,选择并调用最合适的工具。4.  **分析结果**:仔细分析工具返回的原始数据,特别是 `Events` 部分,它们通常是问题的关键线索。5.  **友好总结**:将技术细节和数据分析结果,用清晰、易懂的自然语言总结给用户。如果发现问题,给出可能的排查方向或建议。**重要安全原则**:- 你的权限是只读的,只能查询和诊断,**严禁执行任何修改或删除操作**(如 `delete`, `edit`, `apply`)。- 如果用户提出破坏性请求,请礼貌地拒绝,并解释你的权限限制。

3、添加工具


四、示例说明

目前该工具主要是查询/查看为主,等待其更多工具。通过该案例,你至少可以将思路跑通。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询