
lfedge/ekuiper-kubernetes-tool本工具是一款基于文件驱动的自动化管理程序,用于监控指定文件夹下的命令文件。当检测到新增或更新的命令文件时,程序将解析文件内容并执行其中定义的HTTP命令(主要针对eKuiper流处理引擎),执行完成后将文件信息记录至历史文件(.history)中,避免重复处理。
.history文件,记录已处理的命令文件名及时间戳程序通过YAML格式的配置文件进行参数设置,示例及参数说明如下:
yamlport: 9081 # eKuiper服务端口 timeout: 500 # 命令执行超时时间(单位:毫秒) intervalTime: 60 # 文件夹检查间隔(单位:秒) ip: "127.0.0.1" # eKuiper服务IP地址 logPath: "./log/kubernetes.log" # 日志文件保存路径 commandDir: "./sample/" # 命令文件所在目录路径
| 参数名 | 类型 | 描述 | 默认值示例 |
|---|---|---|---|
| port | int | eKuiper服务端口 | 9081 |
| timeout | int | 命令执行超时时间(毫秒) | 500 |
| intervalTime | int | 文件夹检查间隔(秒) | 60 |
| ip | string | eKuiper服务IP地址 | "127.0.0.1" |
| logPath | string | 日志文件保存路径 | "./log/kubernetes.log" |
| commandDir | string | 命令文件监控目录路径 | "./sample/" |
命令文件为JSON格式,用于定义待执行的HTTP请求集合。文件需放置在commandDir配置指定的目录下,程序将自动监控并处理。
| 字段名 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
| commands | 否 | array | HTTP命令集合,每个元素为一个请求 |
| url | 否 | string | HTTP请求路径(相对于eKuiper IP:Port) |
| method | 否 | string | HTTP请求方法(post/get/delete/put等) |
| description | 是 | string | 操作描述(可选,用于日志记录) |
| data | 否 | json object | 请求体数据(创建操作时必填) |
单个命令文件可包含一个或多个HTTP请求,示例如下:
json{ "commands": [ { "url": "/streams", "description": "创建stream1", "method": "post", "data": { "sql": "create stream stream1 (id bigint, name string) WITH (datasource = \"topic/temp\", FORMAT = \"json\");" } }, { "url": "/streams/stream1", "description": "查询stream1", "method": "get" } ] }
通过以下命令编译生成可执行文件:
bashgo build -o tools/kubernetes/kuiper-kubernetes-tool tools/kubernetes/main.go
编译后生成的可执行文件路径:tools/kubernetes/kuiper-kubernetes-tool
准备配置文件
创建config.yaml,配置eKuiper连接信息、监控目录等参数(详见4.1节)。
准备命令文件
在commandDir目录下创建JSON格式的命令文件(详见4.2节)。
启动程序
执行编译后的可执行文件,程序将自动加载配置并开始监控命令目录:
bash./kuiper-kubernetes-tool # 需与config.yaml在同一目录,或通过参数指定配置文件路径
查看结果
logPath配置的日志文件.history文件,记录处理记录dockerfile# 编译阶段 FROM golang:1.18-alpine AS builder WORKDIR /app COPY . . RUN go mod download RUN go build -o kuiper-kubernetes-tool tools/kubernetes/main.go # 运行阶段 FROM alpine:3.16 WORKDIR /app COPY --from=builder /app/kuiper-kubernetes-tool . COPY config.yaml . # 复制配置文件(或通过挂载外部配置) # 创建命令目录和日志目录 RUN mkdir -p /app/commands /app/log # 运行程序 CMD ["./kuiper-kubernetes-tool"]
bashdocker run -d \ --name kuiper-tool \ -v /host/config.yaml:/app/config.yaml \ # 挂载外部配置文件 -v /host/commands:/app/commands \ # 挂载命令文件目录(需与config.yaml中commandDir一致) -v /host/log:/app/log \ # 挂载日志目录(需与config.yaml中logPath一致) kuiper-kubernetes-tool:latest
yamlversion: "3" services: kuiper-tool: build: . volumes: - ./config.yaml:/app/config.yaml - ./commands:/app/commands - ./log:/app/log restart: always environment: - EKUIPER_IP=192.168.1.100 # 可通过环境变量覆盖配置文件中的eKuiper IP(需程序支持环境变量注入)
创建流
json{ "commands": [ { "url": "/streams", "description": "创建stream1", "method": "post", "data": { "sql": "create stream stream1 (id bigint, name string, score float) WITH (datasource = \"topic/temperature\", FORMAT = \"json\", KEY = \"id\");" } } ] }
查询流列表
json{ "commands": [ { "url": "/streams", "description": "查询所有流", "method": "get" } ] }
查询指定流
json{ "commands": [ { "url": "/streams/stream1", "description": "查询stream1详情", "method": "get" } ] }
删除流
json{ "commands": [ { "url": "/streams/stream1", "description": "删除stream1", "method": "delete" } ] }
创建规则
json{ "commands": [ { "url": "/rules", "description": "创建rule1", "method": "post", "data": { "id": "rule1", "sql": "SELECT * FROM stream1", "actions": [{"log": {}}] } } ] }
启停规则
json{ "commands": [ { "url": "/rules/rule1/stop", "description": "停止rule1", "method": "post" }, { "url": "/rules/rule1/start", "description": "启动rule1", "method": "post" } ] }
查询规则状态
json{ "commands": [ { "url": "/rules/rule1/status", "description": "查询rule1状态", "method": "get" } ] }
单个命令文件可按顺序执行多个关联操作,示例如下:
json{ "commands": [ { "url": "/streams", "description": "创建stream1", "method": "post", "data": { "sql": "create stream stream1 (id bigint) WITH (datasource = \"topic/temp\");" } }, { "url": "/rules", "description": "创建rule1", "method": "post", "data": { "id": "rule1", "sql": "SELECT * FROM stream1", "actions": [{"log": {}}] } }, { "url": "/rules/rule1/start", "description": "启动rule1", "method": "post" } ] }
程序处理命令文件后,会在命令文件所在目录(commandDir)生成.history文件,记录已处理的文件信息,格式如下:
json[ { "name": "sample.json", // 已处理的命令文件名 "loadTime": *** // 处理时间戳(Unix时间,秒级) } ]
说明:
.history文件用于避免重复处理同一命令文件.history中对应记录或修改文件名commandDir目录需提前创建,且程序需有读写权限logPath、commandDir)若为相对路径,需相对于程序运行目录



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务