kom 是一个用于 Kubernetes 操作的工具,相当于 SDK 级的 kubectl、client-go 的使用封装。它提供了一系列功能来管理 Kubernetes 资源,包括创建、更新、删除和获取资源,甚至使用 SQL 查询 k8s 资源。这个项目支持多种 Kubernetes 资源类型的操作,并能够处理自定义资源定义(CRD)。通过使用 kom,可以轻松进行资源的增删改查、日志获取以及操作 Pod 内文件等动作。
主要能力:
- 简单易用:提供创建、更新、删除、获取、列表等功能,包括对内置资源以及 CRD 资源的操作。
- 多集群支持:通过 RegisterCluster 管理多个 Kubernetes 集群,支持 AWS EKS 集群。
- MCP 支持:支持多集群的 MCP 管理,同时支持 stdio、sse 两种模式,内置 58 种工具,支持 SSE 模式、私有化部署、多人共享,支持超过百种组合操作。
- 跨命名空间:通过 kom.Namespace("default","kube-system").List(&items) 跨命名空间查询资源。
- 链式调用:提供链式调用,使操作资源更简单直观。
- 支持自定义资源定义(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 地址进行监控数据查询,支持瞬时查询和区间查询,提供多种结果解析方式。
使用方式: kom 本身作为 SDK 使用,同时提供基于 kom、amis 实现的轻量级 Kubernetes 管理工具 k8m,单文件,支持多平台架构。 下载:从 https://github.com/weibaohui/k8m 下载最新版本。 运行:使用 ./k8m 命令启动,访问 http://127.0.0.1:3618。
MCP 集成: 支持 stdio、sse 两种方式集成,适合 MCP 工具集成,如 Cursor、Claude Desktop(仅支持 stdio 模式)、Windsurf 等,也可使用这些软件的 UI 操作界面进行添加。
- 在 Claude Desktop 设置面板的 API 配置区域添加 MCP Server 地址。
- sse 方式填写 http://localhost:9096/sse,stdio 方式填写 kom 的文件位置。 管理 k8s 默认使用 KUBECONFIG 环境变量。编译得到的二进制文件可当做 stdio 模式使用,http://IP:9096/sse 可当做 sse 模式使用。
AWS EKS 集群注册说明:
- AccessKey:AWS 访问密钥 ID
- SecretAccessKey:AWS 秘密访问密钥
- Region:AWS 区域,如 us-east-1、ap-southeast-1 等
- ClusterName:EKS 集群名称
- RoleARN:(可选)要承担的 IAM 角色 ARN,用于跨账户访问 集群注册后会自动生成 ID,格式为 {Region}-{ClusterName},支持 IAM 角色承担机制实现跨账户集群访问。AWS 凭证信息仅在内存中使用,程序重启后自动清理。
资源操作示例:
- 内置资源对象的增删改查以及 Watch:定义一个 Deployment 对象,并通过 kom 进行资源操作。
- YAML 创建、更新、删除。
- 在 Pod 内执行命令:需要指定容器名称,并且会触发 Exec() 类型的 callbacks;执行 StreamExec() 类型的 callbacks 适合执行 ping 等命令;从 Pod 内执行 env 命令获得 ENV 配置信息;从 pod 定义上提取 ENV 配置信息。
- 根据 Pod 定义中声明的 NodeSelector、NodeAffinity、污点容忍度、NodeName 等配置信息,返回可用节点列表。暂未考虑 Pod 亲和性、CPU 内存等运行时调度因素。
CRD 操作: 在没有 CR 定义的情况下,也可进行增删改查操作,操作方式同 k8s 内置资源。将对象定义为 unstructured.Unstructured,并且需要指定 Group、Version、Kind。可以通过 kom.DefaultCluster().GVK(group, version, kind) 来替代 kom.DefaultCluster().Resource(interface{})。为方便记忆及使用,kom 提供了 kom.DefaultCluster().CRD(group, version, kind) 来简化操作。
回调机制: 内置 callback 机制,可以自定义回调函数,当执行完某项操作后,会调用对应的回调函数。如果回调函数返回 true,则继续执行后续操作,否则终止后续操作。当前支持的 callback 有:get, list, create, update, patch, delete, exec, stream-exec, logs, watch, doc。内置的 callback 名称有:"kom:get","kom:list","kom:create","kom:update","kom:patch","kom:watch","kom:delete","kom:pod:exec","kom:pod:stream:exec","kom:pod:logs","kom:pod:port:forward","kom:doc"。支持回调函数排序,默认按注册顺序执行,可以通过 kom.DefaultCluster().Callback().After("kom:get") 或 .Before("kom:get") 设置顺序。支持删除回调函数,通过 kom.DefaultCluster().Callback().Delete("kom:get");支持替换回调函数,通过 kom.DefaultCluster().Callback().Replace("kom:get",cb)。
SQL 查询: 通过 SQL() 方法查询 k8s 资源,简单高效。Table 名称支持集群内注册的所有资源的全称及简写,包括 CRD 资源。只要是注册到集群上了,就可以查。典型的 Table 名称有:pod, deployment, service, ingress, pvc, pv, node, namespace, secret, configmap, serviceaccount, role, rolebinding, clusterrole, clusterrolebinding, crd, cr, hpa, daemonset, statefulset, job, cronjob, limitrange, horizontalpodautoscaler, poddisruptionbudget, networkpolicy, endpoints, ingressclass, mutatingwebhookconfiguration, validatingwebhookconfiguration, customresourcedefinition, storageclass, persistentvolumeclaim, persistentvolume, podsecurity 等。查询字段目前仅支持 *,即 select *。查询条件目前支持 =、!=、>=、<=、<>、like、in、not in、and、or、between。排序字段目前支持对单一字段进行排序,默认按创建时间倒序排列。支持设置缓存时间,避免频繁查询 k8s API。包括当前的请求值、限制值、可分配值、使用比例。
Prometheus 查询: kom 提供了强大的 Prometheus 查询功能,支持通过集群内的 Prometheus 服务或外部 Prometheus 地址进行监控数据查询。
- 通过命名空间和服务名称自动解析集群内的 Prometheus 服务地址:WithInClusterEndpoint(namespace, svcName) 自动查找指定命名空间下的 Prometheus Service,支持自动识别常见端口(9090)和端口名称(web、http、prometheus、metrics),生成的地址格式为 http://service-name.namespace.svc:port。
- 直接指定 Prometheus 的访问地址。 kom 提供了多种方式解析 Prometheus 查询结果,并提供便捷方法直接获取特定类型的查询结果。
适用场景: 适用于需要以 SDK 方式集成 Kubernetes 操作能力的开发者、需要多集群管理和 CRD 操作的 DevOps 场景、需要通过 MCP 将 k8s 管理能力接入 AI 工具(如 Cursor、Claude Desktop、Windsurf)的场景,以及需要 SQL 方式查询 k8s 资源或进行 Prometheus 监控数据查询的场景。
限制: SQL 查询字段目前仅支持 *;排序目前仅支持单一字段;节点列表返回未考虑 Pod 亲和性、CPU 内存等运行时调度因素。其他未在资料中说明的功能、收费或平台信息暂未提供。