在AIOps领域,OpenClaw的爆火为运维工作带来了新可能——通过AI代理能力对接Kubernetes MCP(Management Communication Protocol),可实现容器集群的自动化监控、故障排查与资源管理。但OpenClaw对MCP的原生支持并不友好,需通过适配MCP客户端、封装专属技能,才能让AI真正接管运维任务。
本文基于2026年最新实践,先拆解OpenClaw与K8s MCP的适配逻辑,再详细提供阿里云与本地双部署全流程,同步分享MCP客户端改造、会话缓存配置、运维技能封装等实操步骤,所有代码命令可直接复制执行,助力运维人员打造专属AI运维助手,解放重复劳动。阿里云上OpenClaw极速一键部署最简单,步骤详情 访问阿里云OpenClaw一键部署专题页面 了解。
一、核心认知:OpenClaw+K8s MCP 运维自动化逻辑
(一)为什么要适配K8s MCP?
Kubernetes MCP是容器集群的管理通信协议,负责统一调度集群资源、传递操作指令;而OpenClaw作为AI代理框架,能理解自然语言运维需求,自动拆解任务并调用MCP工具执行,两者结合可实现:
- 自然语言运维:无需手动输入kubectl命令,用“查看所有运行的Pod”“重启kube-system命名空间下的coredns”等自然语言即可触发操作;
- 自动化流程:OpenClaw自动完成“需求解析→MCP工具调用→结果格式化输出”,无需人工干预;
- 可复用技能:适配后的MCP能力可封装为技能,后续重复使用,降低二次开发成本。
(二)适配核心难点与解决方案
OpenClaw原生MCP客户端无法直接对接K8s MCP Server,核心难点及解决方案如下:
| 适配难点 | 具体问题 | 解决方案 |
| ---- | ---- | ---- |
| 协议不兼容 | K8s MCP Server采用streamable-http传输,响应为text/event-stream格式,原生客户端不支持 | 改造MCP客户端,适配SSE事件流响应 |
| 请求头约束 | 服务端要求Accept同时包含application/json和text/event-stream,否则返回406 | 客户端请求自动添加双类型Accept头 |
| 会话管理 | 初始化后需从响应头获取mcp-session-id,后续请求必须携带,否则返回400 | 客户端自动抓取并缓存session-id,支持文件缓存复用 |
| 状态流转 | 需执行“initialize→notifications/initialized→tools/list”流程,否则工具调用失败 | 客户端内置状态流转逻辑,自动完成初始化与状态确认 |
(三)双部署方案核心差异
| 部署方式 | 核心优势 | 运维适配重点 | 适用场景 |
|---|---|---|---|
| 阿里云部署 | 7×24小时稳定运行、多集群远程管理、算力弹性扩展 | 云端MCP服务持久化、多集群会话隔离、运维告警推送 | 企业级容器集群、多节点运维、无人值守场景 |
| 本地部署 | 数据隐私可控、操作便捷、无服务器成本 | 快速调试MCP适配、单集群管理、离线技能测试 | 个人实验、小型集群运维、技能开发验证 |
二、2026年阿里云部署OpenClaw+K8s MCP流程(企业级运维)
阿里云部署适合管理生产环境容器集群,依托云端稳定性实现长期运维,以下为实战流程:
(一)部署前准备
- 阿里云账号:注册阿里云账号,完成实名认证,优先选择与K8s集群同地域(如上海、深圳),降低网络延迟;
- 服务器配置:推荐轻量应用服务器,基础配置4vCPU+8GiB内存+60GiB ESSD云盘,系统选择Ubuntu 22.04 LTS;
- 核心环境:已部署Kubernetes集群(单节点实验可部署minikube)、K8s MCP Server(版本2.14.5+);
- 核心凭证:阿里云百炼API-Key(获取路径:访问登录阿里云百炼大模型服务平台→密钥管理→创建API-Key);
- 工具准备:SSH工具(FinalShell/Xshell)、Chrome浏览器,记录服务器公网IP与K8s MCP Server地址(如http://192.168.186.183:8080/mcp)。
(二)分步部署流程
新手零基础阿里云上部署OpenClaw喂饭级步骤流程
第一步:访问阿里云OpenClaw一键部署专题页面,找到并点击【一键购买并部署】。
阿里云OpenClaw一键部署专题页面:https://www.aliyun.com/activity/ecs/clawdbot


第二步:选购阿里云轻量应用服务器,配置参考如下:
- 镜像:OpenClaw(Moltbot)镜像(已经购买服务器的用户可以重置系统重新选择镜像)
- 实例:内存必须2GiB及以上。
- 地域:默认美国(弗吉尼亚),目前中国内地域(除香港)的轻量应用服务器,联网搜索功能受限。
- 时长:根据自己的需求及预算选择。



第三步:访问阿里云百炼大模型控制台,找到密钥管理,单击创建API-Key。
前往轻量应用服务器控制台,找到安装好OpenClaw的实例,进入「应用详情」放行18789端口、配置百炼API-Key、执行命令,生成访问OpenClaw的Token。
- 端口放通:需要放通对应端口的防火墙,单击一键放通即可。
- 配置百炼API-Key,单击一键配置,输入百炼的API-Key。单击执行命令,写入API-Key。
- 配置OpenClaw:单击执行命令,生成访问OpenClaw的Token。
- 访问控制页面:单击打开网站页面可进入OpenClaw对话页面。
步骤1:服务器环境初始化
# 1. 远程连接服务器(替换为实际公网IP)
ssh root@你的服务器公网IP
# 2. 更新系统依赖并安装核心工具
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y git curl docker.io nodejs npm python3 python3-pip kubernetes-client
systemctl start docker
systemctl enable docker
# 3. 配置国内Docker镜像源(提升拉取速度)
sudo mkdir -p /etc/docker
cat << EOF | sudo tee /etc/docker/daemon.json
{
"registry-mirrors": ["https://mirror.iscas.ac.cn", "https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 4. 安装Node.js 22+(OpenClaw必需版本)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
# 安装MCP客户端依赖
pip3 install requests sseclient-py fastapi uvicorn
# 验证环境
node --version && docker --version && python3 --version && kubectl version --client
步骤2:部署OpenClaw容器
# 1. 拉取2026年OpenClaw最新镜像
docker pull openclaw/openclaw:2026-latest
# 2. 创建数据持久化目录(含配置、日志、MCP客户端脚本、运维技能)
mkdir -p /opt/openclaw/{
config,logs,mcp-clients,skills}
sudo chmod 755 /opt/openclaw/*
# 3. 启动容器(配置API-Key与挂载目录)
docker run -d \
--name openclaw-aiops \
--restart always \
-p 18789:18789 \
-v /opt/openclaw/config:/app/config \
-v /opt/openclaw/logs:/app/logs \
-v /opt/openclaw/mcp-clients:/app/mcp-clients \
-v /opt/openclaw/skills:/app/skills \
-e TZ=Asia/Shanghai \
-e MODEL_PROVIDER=aliyun_bailian \
-e ALIYUN_BAILIAN_API_KEY="你的百炼API-Key" \
-e K8S_MCP_URL="你的K8s MCP Server地址" \
openclaw/openclaw:2026-latest
# 4. 验证容器启动成功
docker ps | grep openclaw-aiops
步骤3:部署K8s MCP Server(若未部署)
# 1. 安装K8s MCP Server
pip3 install mcp-kubernetes-server==2.14.5
# 2. 启动MCP Server(streamable-http传输模式)
nohup mcp-kubernetes-server --transport streamable-http --host 0.0.0.0 --port 8080 > /var/log/mcp-server.log 2>&1 &
# 3. 验证MCP Server启动成功(查看日志)
tail -f /var/log/mcp-server.log
# 出现"Uvicorn running on http://0.0.0.0:8080"即为成功
步骤4:改造MCP客户端(适配K8s MCP Server)
# 1. 进入OpenClaw容器
docker exec -it openclaw-aiops bash
# 2. 创建适配后的MCP客户端脚本
cat > /app/mcp-clients/mcp_k8s_client.py << 'EOF'
import requests
import sseclient
import json
import argparse
import os
def main():
parser = argparse.ArgumentParser(description='K8s MCP Client (streamable-http适配版)')
parser.add_argument('--url', required=True, help='MCP Server URL (如http://192.168.186.183:8080/mcp)')
parser.add_argument('--session-file', required=True, help='会话缓存文件路径')
parser.add_argument('command', choices=['init', 'tools', 'tool'], help='执行命令')
parser.add_argument('--initialized', action='store_true', help='init时自动发送notifications/initialized')
parser.add_argument('tool_name', nargs='?', help='工具名称(仅tool命令需要)')
parser.add_argument('--args', default='{}', help='工具参数(JSON格式)')
args = parser.parse_args()
headers = {
'Accept': 'application/json, text/event-stream',
'Content-Type': 'application/json'
}
# 初始化逻辑
if args.command == 'init':
# 发送initialize请求
init_params = {
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "openclaw-mcp-k8s-client", "version": "1.0"}
}
}
response = requests.post(args.url, headers=headers, json=init_params, stream=True)
if response.status_code != 200:
print(f"初始化失败:{response.status_code} {response.text}")
return
# 提取session-id
session_id = response.headers.get('mcp-session-id')
if not session_id:
print("未从响应头获取到mcp-session-id")
return
# 缓存session-id
with open(args.session_file, 'w') as f:
json.dump({'session_id': session_id}, f)
print(f"初始化成功,session-id已缓存至{args.session_file}")
# 自动发送notifications/initialized
if args.initialized:
notify_headers = headers.copy()
notify_headers['mcp-session-id'] = session_id
notify_params = {
"jsonrpc": "2.0",
"method": "notifications/initialized"
}
notify_response = requests.post(args.url, headers=notify_headers, json=notify_params)
if notify_response.status_code == 202:
print("notifications/initialized发送成功")
else:
print(f"notifications/initialized失败:{notify_response.status_code}")
# 列出工具逻辑
elif args.command == 'tools':
# 读取session-id
if not os.path.exists(args.session_file):
print("会话文件不存在,请先执行init命令")
return
with open(args.session_file, 'r') as f:
session_data = json.load(f)
session_id = session_data.get('session_id')
if not session_id:
print("会话文件中未找到session-id")
return
# 发送tools/list请求
tool_headers = headers.copy()
tool_headers['mcp-session-id'] = session_id
tool_params = {
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}
response = requests.post(args.url, headers=tool_headers, json=tool_params, stream=True)
if response.status_code == 200:
client = sseclient.SSEClient(response)
for event in client.events():
data = json.loads(event.data)
print("可用工具列表:")
for tool in data.get('result', []):
print(f"- {tool['name']}: {tool.get('description', '无描述')}")
else:
print(f"获取工具列表失败:{response.status_code} {response.text}")
# 调用工具逻辑
elif args.command == 'tool':
if not args.tool_name:
print("请指定工具名称")
return
# 读取session-id
if not os.path.exists(args.session_file):
print("会话文件不存在,请先执行init命令")
return
with open(args.session_file, 'r') as f:
session_data = json.load(f)
session_id = session_data.get('session_id')
if not session_id:
print("会话文件中未找到session-id")
return
# 发送工具调用请求
tool_headers = headers.copy()
tool_headers['mcp-session-id'] = session_id
try:
tool_args = json.loads(args.args)
except json.JSONDecodeError:
print("参数格式错误,需为JSON格式")
return
tool_params = {
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"tool": args.tool_name,
"args": tool_args
}
}
response = requests.post(args.url, headers=tool_headers, json=tool_params, stream=True)
if response.status_code == 200:
client = sseclient.SSEClient(response)
for event in client.events():
data = json.loads(event.data)
print("工具调用结果:")
print(json.dumps(data.get('result', {}), indent=2))
else:
print(f"工具调用失败:{response.status_code} {response.text}")
if __name__ == '__main__':
main()
EOF
# 3. 赋予脚本执行权限
chmod +x /app/mcp-clients/mcp_k8s_client.py
# 4. 验证客户端初始化(替换为你的MCP URL)
python3 /app/mcp-clients/mcp_k8s_client.py \
--url $K8S_MCP_URL \
--session-file /tmp/mcp_k8s.sid.json \
init --initialized
步骤5:封装MCP运维技能(自然语言调用)
# 1. 创建K8s运维技能配置
mkdir -p /app/skills/k8s-mcp-skill
cat > /app/skills/k8s-mcp-skill/skill.json << 'EOF'
{
"name": "k8s-mcp-skill",
"version": "1.0",
"description": "K8s MCP运维技能,支持自然语言调用K8s集群操作",
"commands": [
{
"name": "list-pods",
"description": "查看K8s集群所有Pod",
"exec": "python3 /app/mcp-clients/mcp_k8s_client.py --url {K8S_MCP_URL} --session-file /tmp/mcp_k8s.sid.json tool k8s_pods_list --args '{}'"
},
{
"name": "whoami",
"description": "查看K8s认证信息",
"exec": "python3 /app/mcp-clients/mcp_k8s_client.py --url {K8S_MCP_URL} --session-file /tmp/mcp_k8s.sid.json tool k8s_auth_whoami --args '{}'"
},
{
"name": "restart-pod",
"description": "重启指定Pod",
"exec": "python3 /app/mcp-clients/mcp_k8s_client.py --url {K8S_MCP_URL} --session-file /tmp/mcp_k8s.sid.json tool k8s_pod_restart --args '{\"name\":\"{pod_name}\",\"namespace\":\"{namespace}\"}'"
}
]
}
EOF
# 2. 安装技能并配置环境变量
openclaw skills install /app/skills/k8s-mcp-skill
openclaw config set env.K8S_MCP_URL "$K8S_MCP_URL" --json
# 3. 重启OpenClaw使技能生效
openclaw restart
exit
步骤6:云端访问与运维测试
- 生成管理员Token:
docker exec -it openclaw-aiops openclaw token generate --admin - 浏览器输入
http://服务器公网IP:18789/?token=你的管理员Token,登录Web控制台; - 运维测试(自然语言指令):
- 发送“查看K8s集群所有Pod”,验证是否返回Pod列表;
- 发送“查看K8s认证信息”,验证认证状态;
- 发送“重启default命名空间下的nginx-deployment-58dcfbb977-jw9d8 Pod”,验证Pod重启功能。
三、2026年OpenClaw本地部署流程+K8s MCP(个人实验)
本地部署适合运维技能调试与小型集群管理,操作便捷且数据隐私可控,支持Windows、macOS、Linux三大系统:
(一)部署前准备
- 硬件要求:CPU≥Intel i5/Ryzen 5,内存≥8GB,磁盘预留≥30GB SSD;
- 软件要求:Node.js ≥22.0.0、pnpm、Git、Python 3.9+、minikube(单节点K8s集群);
- 核心环境:已启动minikube集群(
minikube start)、K8s MCP Server 2.14.5+; - 核心凭证:阿里云百炼API-Key(可选,本地模型可无需);
- 网络要求:部署时需联网下载源码与依赖,MCP客户端与K8s集群需处于同一网段。
(二)分步部署流程
步骤1:基础依赖安装
# Windows(管理员PowerShell执行)
npm install -g pnpm git
pip3 install requests sseclient-py fastapi uvicorn mcp-kubernetes-server kubernetes
pnpm config set registry https://registry.npmmirror.com/
# 安装minikube(需启用WSL2)
New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing
# macOS(终端执行)
brew install node@22 git python3 minikube
pip3 install requests sseclient-py fastapi uvicorn mcp-kubernetes-server kubernetes
pnpm config set registry https://registry.npmmirror.com/
# Linux(Ubuntu/Debian)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs git
npm install -g pnpm
pip3 install requests sseclient-py fastapi uvicorn mcp-kubernetes-server kubernetes
pnpm config set registry https://registry.npmmirror.com/
# 安装minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 验证依赖版本
node --version # 需≥22.0.0
pnpm --version
python3 --version
minikube version
步骤2:启动本地K8s集群与MCP Server
# 1. 启动minikube集群
minikube start
# 2. 启动K8s MCP Server
nohup mcp-kubernetes-server --transport streamable-http --host 0.0.0.0 --port 8080 > ~/mcp-server.log 2>&1 &
# 3. 验证MCP Server启动成功
tail -f ~/mcp-server.log
步骤3:安装OpenClaw并配置MCP客户端
# 1. 全局安装OpenClaw最新版本
npm install -g openclaw@latest
# 2. 创建MCP客户端目录
mkdir -p ~/.openclaw/mcp-clients
cd ~/.openclaw/mcp-clients
# 3. 下载适配后的MCP客户端脚本
cat > mcp_k8s_client.py << 'EOF'
# 粘贴步骤4中相同的MCP客户端脚本内容
EOF
# 4. 赋予执行权限
chmod +x mcp_k8s_client.py
# 5. 初始化MCP会话(替换为本地MCP URL)
python3 mcp_k8s_client.py \
--url http://127.0.0.1:8080/mcp \
--session-file ~/.openclaw/mcp_k8s.sid.json \
init --initialized
步骤4:配置K8s运维技能
# 1. 创建本地技能目录
mkdir -p ~/.openclaw/skills/k8s-mcp-skill
cat > ~/.openclaw/skills/k8s-mcp-skill/skill.json << 'EOF'
{
"name": "k8s-mcp-skill",
"version": "1.0",
"description": "本地K8s MCP运维技能",
"commands": [
{
"name": "list-pods",
"description": "查看所有Pod",
"exec": "python3 ~/.openclaw/mcp-clients/mcp_k8s_client.py --url http://127.0.0.1:8080/mcp --session-file ~/.openclaw/mcp_k8s.sid.json tool k8s_pods_list --args '{}'"
},
{
"name": "list-namespaces",
"description": "查看所有命名空间",
"exec": "python3 ~/.openclaw/mcp-clients/mcp_k8s_client.py --url http://127.0.0.1:8080/mcp --session-file ~/.openclaw/mcp_k8s.sid.json tool k8s_namespaces_list --args '{}'"
}
]
}
EOF
# 2. 安装技能
openclaw skills install ~/.openclaw/skills/k8s-mcp-skill
# 3. 启动OpenClaw服务
openclaw gateway start --port 18789
步骤5:本地运维测试
- 生成管理员Token:
openclaw token generate --admin --allow-ip 127.0.0.1 - 浏览器输入
http://127.0.0.1:18789,粘贴Token登录; - 发送自然语言指令“查看所有命名空间”“查看kube-system命名空间下的Pod”,验证运维功能正常。
四、进阶优化与常见问题排查
(一)运维自动化进阶配置
# 1. 配置定时巡检任务(每天凌晨3点检查Pod状态)
openclaw cron add --name "k8s-pod-check" \
--schedule "0 3 * * *" \
--command "openclaw skills run k8s-mcp-skill list-pods > ~/k8s-pod-check.log"
# 2. 配置故障告警(Pod异常时发送通知)
cat > ~/.openclaw/skills/k8s-mcp-skill/alert.sh << 'EOF'
#!/bin/bash
# 检查异常Pod
PODS=$(python3 ~/.openclaw/mcp-clients/mcp_k8s_client.py --url http://127.0.0.1:8080/mcp --session-file ~/.openclaw/mcp_k8s.sid.json tool k8s_pods_list --args '{
}' | grep -E "Error|CrashLoopBackOff")
if [ -n "$PODS" ]; then
echo "发现异常Pod:$PODS" | mail -s "K8s Pod异常告警" your-email@example.com
fi
EOF
chmod +x ~/.openclaw/skills/k8s-mcp-skill/alert.sh
# 3. 添加定时告警任务
openclaw cron add --name "k8s-alert" \
--schedule "*/10 * * * *" \
--command "~/.openclaw/skills/k8s-mcp-skill/alert.sh"
(二)常见问题排查
MCP客户端初始化失败,提示406 Not Acceptable:
- 解决方案:检查客户端是否添加双类型Accept头,重新执行初始化命令:
# 验证请求头配置 grep -n "Accept" ~/.openclaw/mcp-clients/mcp_k8s_client.py # 确保为:'Accept': 'application/json, text/event-stream'
- 解决方案:检查客户端是否添加双类型Accept头,重新执行初始化命令:
工具调用失败,提示400 Bad Request:
- 解决方案:确认session-id已缓存且正确携带,重新初始化会话:
# 重新初始化 python3 mcp_k8s_client.py --url http://127.0.0.1:8080/mcp --session-file ~/.openclaw/mcp_k8s.sid.json init --initialized # 查看session-id cat ~/.openclaw/mcp_k8s.sid.json
- 解决方案:确认session-id已缓存且正确携带,重新初始化会话:
OpenClaw无法调用K8s技能:
- 解决方案:检查技能路径配置正确,重启OpenClaw服务:
openclaw skills list | grep k8s-mcp-skill openclaw gateway restart
- 解决方案:检查技能路径配置正确,重启OpenClaw服务:
MCP Server启动失败,提示端口占用:
- 解决方案:更换端口启动,例如使用8081端口:
pkill -f mcp-kubernetes-server nohup mcp-kubernetes-server --transport streamable-http --host 0.0.0.0 --port 8081 > ~/mcp-server.log 2>&1 &
- 解决方案:更换端口启动,例如使用8081端口:
五、总结
2026年,OpenClaw与K8s MCP的组合为AIOps提供了高效落地方案——通过改造MCP客户端适配协议约束,封装运维技能,实现了自然语言驱动的容器集群管理。阿里云部署适合企业级多集群运维,依托云端稳定性实现7×24小时无人值守;本地部署聚焦个人实验与小型集群管理,操作便捷且成本可控。
核心价值在于“降本增效”:运维人员无需记忆复杂的kubectl命令,用自然语言即可完成Pod查看、重启、故障排查等操作;适配后的MCP能力可封装为可复用技能,后续新增运维场景时无需重复开发;结合定时任务与告警机制,还能实现运维自动化闭环,大幅减少人工干预。
无论是企业运维团队还是技术爱好者,都能通过本文的部署与适配流程,快速搭建专属AI运维助手。随着OpenClaw对MCP支持的持续优化,未来还将实现更复杂的运维场景自动化,让AIOps真正走进日常运维工作。