Kom
kom 是一个用于 Kubernetes 操作的工具,SDK级的kubectl、client-go的使用封装。并且支持作为管理k8s 的 MCP server。 它提供了一系列功能来管理 Kubernetes 资源,包括创建、更新、删除和获取资源,甚至使用SQL查询k8s资源。这个项目支持多种 Kubernetes 资源类型的操作,并能够处理自定义资源定义(CRD)。 通过使用 kom,你可以轻松地进行资源的增删改查和日志获取以及操作POD内文件等动作。
Install / Use
/learn @weibaohui/KomREADME
Kom - Kubernetes Operations Manager
简介
kom 是一个用于 Kubernetes 操作的工具,相当于SDK级的kubectl、client-go的使用封装。
它提供了一系列功能来管理 Kubernetes 资源,包括创建、更新、删除和获取资源。这个项目支持多种 Kubernetes 资源类型的操作,并能够处理自定义资源定义(CRD)。
通过使用 kom,你可以轻松地进行资源的增删改查和日志获取以及操作POD内文件等动作,甚至可以使用SQL语句来查询、管理k8s资源。
特点
- 简单易用:kom 提供了丰富的功能,包括创建、更新、删除、获取、列表等,包括对内置资源以及CRD资源的操作。
- 多集群支持:通过RegisterCluster,你可以轻松地管理多个 Kubernetes 集群,支持AWS EKS集群。
- MCP支持:支持多集群的MCP管理,同时支持stdio、sse两种模式,内置58种工具,支持SSE模式,支持私有化部署,多人共享。支持超过百种组合操作。
- 支持跨命名空间:通过kom.Namespace("default","kube-system").List(&items) 跨命名空间查询资源。
- 链式调用:kom 提供了链式调用,使得操作资源更加简单和直观。
- 支持自定义资源定义(CRD):kom 支持自定义资源定义(CRD),你可以轻松地定义和操作自定义资源。
- 支持回调机制,轻松拓展业务逻辑,而不必跟k8s操作强耦合。
- 支持POD内文件操作,轻松上传、下载、删除文件。
- 支持高频操作封装,如deployment的restart重启、scale扩缩容、启停等20余项操作功能。
- 支持SQL查询k8s资源。select * from pod where metadata.namespace='kube-system' or metadata.namespace='default' order by metadata.creationTimestamp desc
- 支持查询缓存,在高频、批量查询场景下,可设置缓存过期时间,提升查询性能。列表过滤条件不受缓存影响。
- 支持Prometheus查询,支持通过集群内的Prometheus服务或外部Prometheus地址进行监控数据查询,支持瞬时查询和区间查询,提供多种结果解析方式。
示例程序
k8m 是一个轻量级的 Kubernetes 管理工具,它基于kom、amis实现,单文件,支持多平台架构。
- 下载:从 https://github.com/weibaohui/k8m 下载最新版本。
- 运行:使用
./k8m命令启动,访问http://127.0.0.1:3618。
安装
import (
"github.com/weibaohui/kom"
"github.com/weibaohui/kom/callbacks"
)
func main() {
// 注册回调,务必先注册
callbacks.RegisterInit()
// 注册集群
defaultKubeConfig := os.Getenv("KUBECONFIG")
if defaultKubeConfig == "" {
defaultKubeConfig = filepath.Join(homedir.HomeDir(), ".kube", "config")
}
_, _ = kom.Clusters().RegisterInCluster()
_, _ = kom.Clusters().RegisterByPathWithID(defaultKubeConfig, "default")
kom.Clusters().Show()
// 其他逻辑
}
使用示例
0. 多集群 k8s MCP 支持
同时支持stdio、sse两种模式 支持多个tools 支持。包括对任意资源的查询列表删除描述操作,以及POD日志读取操作。
1.集成到代码中
// 一行代码启动MCP Server
mcp.RunMCPServer("kom mcp server", "0.0.1", 9096)
2. 编译
# 源码启动
go build main.go
//编译为kom
3. 启动
启动后支持两种模式,一种为stdio,一种sse。 管理k8s默认使用KUBECONFIG env环境变量。
# 设置KUBECONFIG环境变量
export KUBECONFIG = /Users/xxx/.kube/config
# 运行
./kom
# MCP Server 访问地址
http://IP:9096/sse
此时,编译得到的二进制文件,可当做stdio 模式使用。 http://IP:9096/sse 模式,可以当做sse 模式使用。
4. 集成到MCP工具中
支持stdio\sse 两种方式集成。 适合MCP工具集成,如Cursor、Claude Desktop(仅支持stdio模式)、Windsurf等,此外也可以使用这些软件的UI操作界面进行添加。
{
"mcpServers": {
"kom": {
"type": "sse",
"url": "http://IP:9096/sse"
}
}
}
{
"mcpServers": {
"k8m": {
"command": "path/to/kom",
"args": []
}
}
}
MCP工具列表(59种)
| 类别 | 方法 | 描述 |
| -------------------------- | ------------------------------------ | ----------------------------------------------------- |
| 集群管理(1) | list_k8s_clusters | 列出所有已注册的Kubernetes集群 |
| DaemonSet管理(1) | restart_k8s_daemonset | 通过集群、命名空间和名称,重启DaemonSet |
| 部署管理(12) | scale_k8s_deployment | 通过集群、命名空间、名称 扩缩容Deployment,设置副本数 |
| | restart_k8s_deployment | 通过集群、命名空间和名称,重启Deployment |
| | stop_k8s_deployment | 停止Deployment |
| | restore_k8s_deployment | 恢复Deployment副本数 |
| | update_k8s_deployment_image_tag | 更新Deployment中容器的镜像Tag |
| | get_k8s_deployment_rollout_history | 查询升级历史 |
| | undo_k8s_deployment_rollout | 回滚 |
| | pause_k8s_deployment_rollout | 暂停升级 |
| | resume_k8s_deployment_rollout | 恢复升级 |
| | get_k8s_deployment_rollout_status | 查询升级状态 |
| | get_k8s_deployment_hpa_list | 查询Deployment的HPA列表 |
| | list_k8s_deploy_event | 列出Deployment相关的事件 |
| 动态资源管理(含CRD,8) | get_k8s_resource | 通过集群、命名空间和名称获取Kubernetes资源详情 |
| | describe_k8s_resource | 通过集群、命名空间和名称获取Kubernetes资源详情 |
| | delete_k8s_resource | 通过集群、命名空间和名称删除Kubernetes资源 |
| | list_k8s_resource | 按集群和资源类型列出Kubernetes资源 |
| | annotate_k8s_resource | 为Kubernetes资源添加或删除注解 |
| | label_k8s_resource | 为Kubernetes资源添加或删除标签 |
| | patch_k8s_resource | 通过集群、命名空间和名称更新Kubernetes资源 |
| | GetDynamicResource | 获取动态资源 |
| 节点管理(11) | taint_k8s_node | 为节点添加污点 |
| | untaint_k8s_node | 为节点移除污点 |
| | cordon_k8s_node | 设置节点为不可调度状态 |
| | uncordon_k8s_node | 设置节点为可调度状态 |
| | drain_k8s_node | 清空节点上的Pod并防止新的Pod调度 |
| | get_k8s_node_ip_usage | 查询节点IP资源使用情况 |
| | list_k8s_node | 获取Node列表 |
| | get_k8s_top_node | 获取Node节点CPU和内存资源用量排名列表 |
| | get_k8s_pod_count_running_on_node | 查询某个节点上运行的Pod数量统计 |
| | get_k8s_node_resource_usage | 查询节点资源使用情况统计 |
| | TaintNodeTool | 为节点添加污点 |
| 事件管理(1) | list_k8s_event | 按集群和命名空间列出Kubernetes事件 |
| Ingress管理(1) | set_default_k8s_ingressclass | 设置IngressClass为默认 |
| Pod 管理(18) | run_command_in_k8s_pod | 在Pod内执行命令 |
| | list_k8s_pod_event | 列出Pod相关的事件 |
| | list_files_in_k8s_pod | 获取Pod中指定路径下的文件列表 |
| | list_pod_all_files | 获取Pod中指定路径下的所有文件列表,包含子目录 |
| | delete_k8s_pod | 删除Pod |
| | delete_pod_file | 删除Pod中的指定文件 |
| | get_k8s_pod_linked_env | 获取Pod运行时的环境变量信息 |
| | get_pod_linked_env_from_yaml | 通过Pod yaml 定义 获取Pod定义中的环境变量信息 |
| | get_k8s_pod_linked_services | 获取与Pod关联的Service |
| | get_pod_linked_ingresses | 获取与Pod关联的Ingress |
| | get_pod_linked_endpoints | 获取与Pod关联的Endpoints |
| | list_k8s_pod | 获取Pod列表 |
| | get_k8s_top_pod | 获取Pod CPU 内存 资源用量排名 列表 |
| | ListPodFilesTool | 列出Pod文件 |
| | ListAllPodFilesTool | 列出Pod所有文件 |
| | DeletePodFileTool | 删除Pod文件 |
| | UploadPodFileTool | 上传Pod文件 |
| | GetPodLogsTool | 获取Pod日志 |
| | describe_k8s_pod | 描述Pod容器组 |
| 存储管理(3) | set_k8s_default_storageclass | 设置StorageClass为默认 |
| | get_k8s_storageclass_pvc_count | 获取StorageClass下的PVC数量 |
| | get_k8s_storageclass_pv_count | 获取StorageClass下的PV数量 |
| YAML管理(2) | apply_k8s_yaml | 通过YAML创建或更新Kubernetes资源
