Kom - Kubernetes Operations Manager

Kom - Kubernetes Operations Manager

site icon
2025.04.18 94
GoKubernetes管理多集群管理CRD操作Pod操作SQL查询开发效率
Kom(Kubernetes Operations Manager)是一个用于Kubernetes操作的工具,相当于SDK级的kubectl和client-go的封装。它提供了一系列功能来管理Kubernetes资源,包括创建、更新、删除和获取资源,支持多种Kubernetes资源类型的操作,并能够处理自定义资源定义(CRD)。通过使用Kom,用户可以轻松进行资源的增删改查、日志获取、Pod内文件操作等,甚至可以使用SQL语句来查询和管理Kubernetes资源。
View on GitHub

Overview

产品定位

Kom是一个Kubernetes操作管理工具,旨在简化Kubernetes资源的操作和管理,提供丰富的功能和易用的接口。

核心功能

  1. 简单易用:提供创建、更新、删除、获取、列表等操作,支持内置资源和CRD资源的操作。
  2. 多集群支持:通过RegisterCluster轻松管理多个Kubernetes集群。
  3. MCP支持:支持多集群的MCP管理,支持stdio和sse两种模式,内置48种工具。
  4. 跨命名空间查询:支持跨命名空间查询资源。
  5. 链式调用:提供链式调用,使操作资源更加简单和直观。
  6. 自定义资源定义(CRD)支持:轻松定义和操作自定义资源。
  7. 回调机制:支持回调机制,轻松拓展业务逻辑。
  8. Pod内文件操作:支持上传、下载、删除文件。
  9. 高频操作封装:如Deployment的restart重启、scale扩缩容、启停等20余项操作功能。
  10. SQL查询Kubernetes资源:支持使用SQL语句查询Kubernetes资源。
  11. 查询缓存:在高频、批量查询场景下,可设置缓存过期时间,提升查询性能。

适用场景

  1. Kubernetes资源管理:适用于需要频繁操作Kubernetes资源的场景。
  2. 多集群管理:适用于需要管理多个Kubernetes集群的场景。
  3. 自定义资源操作:适用于需要操作自定义资源定义(CRD)的场景。
  4. Pod内文件操作:适用于需要在Pod内进行文件操作的场景。
  5. 高频查询优化:适用于需要高频查询Kubernetes资源并优化性能的场景。

工具列表

Kom内置了49种工具,涵盖集群管理、部署管理、动态资源管理、节点管理、Pod管理、YAML管理、存储管理、Ingress管理等多个类别。具体工具列表如下:

类别 方法 描述
集群管理(1) list_clusters 列出所有已注册的Kubernetes集群
部署管理(12) scale_deployment 扩缩容Deployment
restart_deployment 重启Deployment
stop_deployment 停止Deployment
restore_deployment 恢复Deployment
update_tag_deployment 更新Deployment镜像标签
rollout_history_deployment 查询Deployment升级历史
rollout_undo_deployment 回滚Deployment
rollout_pause_deployment 暂停Deployment升级
rollout_resume_deployment 恢复Deployment升级
rollout_status_deployment 查询Deployment升级状态
hpa_list_deployment 查询Deployment的HPA列表
list_deployment_pods 获取Deployment管理的Pod列表
动态资源管理(含CRD,8) get_k8s_resource 获取k8s资源
describe_k8s_resource 描述k8s资源
delete_k8s_resource 删除k8s资源
list_k8s_resource 列表形式获取k8s资源
list_k8s_event 列表形式获取k8s事件
patch_k8s_resource 更新k8s资源,以JSON Patch方式更新
label_k8s_resource 为k8s资源添加或删除标签
annotate_k8s_resource 为k8s资源添加或删除注解
节点管理(8) taint_node 为节点添加污点
untaint_node 为节点移除污点
cordon_node 为节点设置Cordon
uncordon_node 为节点取消Cordon
drain_node 为节点执行Drain
get_node_resource_usage 查询节点的资源使用情况
get_node_ip_usage 查询节点上Pod IP资源使用情况
get_node_pod_count 查询节点上的Pod数量
Pod 管理(14) list_pod_files 列出Pod文件
list_all_pod_files 列出Pod所有文件
delete_pod_file 删除Pod文件
upload_file_to_pod 上传文件到Pod内,支持传递文本内容,存储为Pod内文件
get_pod_logs 获取Pod日志
run_command_in_pod 在Pod中执行命令
get_pod_linked_service 获取Pod关联的Service
get_pod_linked_ingress 获取Pod关联的Ingress
get_pod_linked_endpoints 获取Pod关联的Endpoints
get_pod_linked_pvc 获取Pod关联的PVC
get_pod_linked_pv 获取Pod关联的PV
get_pod_linked_env 通过在pod内运行env命令获取Pod运行时环境变量
get_pod_linked_env_from_yaml 通过Pod yaml定义获取Pod运行时环境变量
get_pod_resource_usage 获取Pod的资源使用情况,包括CPU和内存的请求值、限制值、可分配值和使用比例
YAML管理(2) apply_yaml 应用YAML资源
delete_yaml 删除YAML资源
存储管理(3) set_default_storageclass 设置默认StorageClass
get_storageclass_pvc_count 获取StorageClass下的PVC数量
get_storageclass_pv_count 获取StorageClass下的PV数量
Ingress管理(1) set_default_ingressclass 设置默认IngressClass

使用教程

使用依赖

  1. 确保已安装Go环境。
  2. 确保已配置Kubernetes集群的kubeconfig文件。

安装教程

  1. 导入Kom库:
import (
    "github.com/weibaohui/kom"
    "github.com/weibaohui/kom/callbacks"
)
  1. 注册回调和集群:
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()
    // 其他逻辑
}

调试方式

  1. 启动MCP Server:
mcp.RunMCPServer("kom mcp server", "0.0.1", 9096)
  1. 编译并运行:
go build main.go
./kom
  1. 访问MCP Server:
http://IP:9096/sse

常见问题解答

  1. 如何注册多个集群? 使用kom.Clusters().RegisterByPathWithID方法注册多个集群。
  2. 如何查询跨命名空间的资源? 使用kom.Namespace("default","kube-system").List(&items)方法查询跨命名空间的资源。
  3. 如何使用SQL查询Kubernetes资源? 使用kom.DefaultCluster().Sql(sql).List(&list)方法执行SQL查询。
  4. 如何操作Pod内的文件? 使用kom.DefaultCluster().Namespace("default").Name("nginx").Ctl().Pod().ContainerName("nginx").ListFiles("/etc")方法操作Pod内的文件。

许可证

该项目遵循 MIT 开源许可条款,请参阅 MIT 了解完整条款。