
Kom - Kubernetes Operations Manager

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资源的操作和管理,提供丰富的功能和易用的接口。
核心功能
- 简单易用:提供创建、更新、删除、获取、列表等操作,支持内置资源和CRD资源的操作。
- 多集群支持:通过RegisterCluster轻松管理多个Kubernetes集群。
- MCP支持:支持多集群的MCP管理,支持stdio和sse两种模式,内置48种工具。
- 跨命名空间查询:支持跨命名空间查询资源。
- 链式调用:提供链式调用,使操作资源更加简单和直观。
- 自定义资源定义(CRD)支持:轻松定义和操作自定义资源。
- 回调机制:支持回调机制,轻松拓展业务逻辑。
- Pod内文件操作:支持上传、下载、删除文件。
- 高频操作封装:如Deployment的restart重启、scale扩缩容、启停等20余项操作功能。
- SQL查询Kubernetes资源:支持使用SQL语句查询Kubernetes资源。
- 查询缓存:在高频、批量查询场景下,可设置缓存过期时间,提升查询性能。
适用场景
- Kubernetes资源管理:适用于需要频繁操作Kubernetes资源的场景。
- 多集群管理:适用于需要管理多个Kubernetes集群的场景。
- 自定义资源操作:适用于需要操作自定义资源定义(CRD)的场景。
- Pod内文件操作:适用于需要在Pod内进行文件操作的场景。
- 高频查询优化:适用于需要高频查询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 |
使用教程
使用依赖
- 确保已安装Go环境。
- 确保已配置Kubernetes集群的kubeconfig文件。
安装教程
- 导入Kom库:
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()
// 其他逻辑
}
调试方式
- 启动MCP Server:
mcp.RunMCPServer("kom mcp server", "0.0.1", 9096)
- 编译并运行:
go build main.go
./kom
- 访问MCP Server:
http://IP:9096/sse
常见问题解答
- 如何注册多个集群?
使用
kom.Clusters().RegisterByPathWithID
方法注册多个集群。 - 如何查询跨命名空间的资源?
使用
kom.Namespace("default","kube-system").List(&items)
方法查询跨命名空间的资源。 - 如何使用SQL查询Kubernetes资源?
使用
kom.DefaultCluster().Sql(sql).List(&list)
方法执行SQL查询。 - 如何操作Pod内的文件?
使用
kom.DefaultCluster().Namespace("default").Name("nginx").Ctl().Pod().ContainerName("nginx").ListFiles("/etc")
方法操作Pod内的文件。