kom

Kom:Kubernetes操作利器,通过MCP协议赋能AI模型与K8s集群的交互。

kom
kom能力展示

kom 解决方案概述

kom 是一个 Kubernetes 操作管理器,它作为 SDK 级别的 kubectlclient-go 的封装,简化了 Kubernetes 资源的管理。通过 kom,开发者可以轻松实现 Kubernetes 资源的增删改查,以及诸如 Pod 日志获取和文件操作等功能。

kom 的主要特点包括多集群支持、链式调用、自定义资源定义(CRD)支持和回调机制。它还支持使用 SQL 语句查询和管理 Kubernetes 资源,并提供查询缓存以提升性能。kom 通过 MCP 协议与 AI 模型无缝集成,内置 48 种工具,支持 SSE 模式和私有化部署,为 AI 模型提供强大的 Kubernetes 集群管理能力。开发者可以通过简单的 API 调用,将 kom 集成到自己的 AI 应用中,实现对 Kubernetes 集群的自动化管理和监控。

kom 核心能力

多集群统一管理

kom 允许用户注册和管理多个 Kubernetes 集群,通过简单的 API 调用即可在不同集群间切换和操作资源。这极大地简化了多集群环境下的管理复杂性,避免了手动维护多个 kubeconfig 文件和频繁切换上下文的麻烦。开发者可以使用 kom.Clusters().RegisterByPathWithID() 轻松注册集群,并通过集群 ID 选择目标集群进行操作。例如,可以同时管理开发、测试和生产环境的集群,并在这些集群间快速部署和迁移应用。此功能通过统一的接口暴露多集群能力,降低了学习和使用成本,提升了开发和运维效率。

技术实现上,kom 内部维护了一个集群对象的注册表,每个集群对象都封装了与 Kubernetes API Server 的连接信息。通过指定集群 ID,kom 可以选择对应的集群对象,并将后续的 API 请求路由到该集群。

动态资源管理(含CRD)

kom 不仅支持 Kubernetes 内置资源的管理,还能够无缝处理自定义资源定义(CRD)。开发者可以使用 kom 提供的通用 API 对包括 CRD 在内的任何 Kubernetes 资源进行增删改查操作,无需编写特定于资源类型的代码。通过 kom.DefaultCluster().CRD() 方法,可以指定 CRD 的 Group、Version 和 Kind,然后像操作内置资源一样操作 CRD 资源。例如,可以创建、更新和删除自定义的 CronTab 资源,或者查询特定 CRD 资源的状态。这种动态资源管理能力极大地提高了 Kubernetes 扩展性和灵活性,使得开发者可以轻松地管理自定义的 Kubernetes 资源。

技术实现上,kom 使用 unstructured.Unstructured 对象来表示 CRD 资源,这是一种通用的数据结构,可以存储任意 Kubernetes 资源的信息。kom 封装了 Kubernetes API,能够根据指定的 Group、Version 和 Kind 动态地发现 CRD 资源,并将其转换为 unstructured.Unstructured 对象进行处理。

强大的Pod操作能力

kom 提供了丰富的 Pod 操作功能,包括日志获取、命令执行、文件上传下载等。开发者可以使用 kom 提供的 API 轻松地与 Pod 交互,无需手动执行 kubectl execkubectl cp 命令。例如,可以使用 kom.DefaultCluster().Namespace().Name().Ctl().Pod().ContainerName().GetLogs() 获取 Pod 的日志,或者使用 kom.DefaultCluster().Namespace().Name().Ctl().Pod().ContainerName().Command().ExecuteCommand() 在 Pod 中执行命令。此外,kom 还支持流式执行命令,可以实时地获取命令的输出。这些 Pod 操作功能极大地提高了开发和调试效率,使得开发者可以更加方便地管理和维护 Kubernetes 应用。

技术实现上,kom 封装了 Kubernetes API 的 Pod 相关接口,并提供了更加友好的 API 供开发者使用。kom 使用 Kubernetes 的 remotecommand 包来实现 Pod 中命令的执行,并使用 io.Copy 将命令的输出流复制到客户端。

基于SQL查询K8s资源

kom 创新性地引入了使用 SQL 语句查询 Kubernetes 资源的能力。开发者可以使用熟悉的 SQL 语法来过滤、排序和分页查询 Kubernetes 资源,极大地提高了查询效率和灵活性。例如,可以使用 select * from pod where metadata.namespace='kube-system' or metadata.namespace='default' order by metadata.creationTimestamp desc 查询 kube-systemdefault 命名空间下的所有 Pod,并按照创建时间排序。这种 SQL 查询能力使得开发者可以更加方便地获取 Kubernetes 资源的信息,并进行更加复杂的分析和处理。

技术实现上,kom 内部实现了一个 SQL 查询引擎,可以将 SQL 语句转换为 Kubernetes API 的查询参数。kom 使用反射机制来访问 Kubernetes 资源的字段,并将查询结果转换为 SQL 查询引擎可以处理的数据结构。

灵活的回调机制

kom 内置了灵活的回调机制,允许开发者在资源操作前后执行自定义的回调函数。通过注册回调函数,开发者可以扩展 kom 的功能,实现自定义的业务逻辑。例如,可以在创建资源之前验证资源的配置,或者在删除资源之后发送通知。kom 支持多种回调类型,包括 get, list, create, update, patch, delete, exec, stream-exec, logs, watch。开发者可以使用 kom.DefaultCluster().Callback().Register() 方法注册回调函数,并使用 kom.DefaultCluster().Callback().After()kom.DefaultCluster().Callback().Before() 方法指定回调函数的执行顺序。这种回调机制极大地提高了 kom 的可扩展性和灵活性,使得开发者可以根据自己的需求定制 kom 的行为。

技术实现上,kom 内部维护了一个回调函数注册表,每个回调函数都与一个特定的操作类型相关联。当执行某个操作时,kom 会按照注册顺序执行与该操作类型相关联的回调函数。