产品定位
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库:
bash
import (
"github.com/weibaohui/kom"
"github.com/weibaohui/kom/callbacks"
) - 注册回调和集群:
go
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:
go
mcp.RunMCPServer("kom mcp server", "0.0.1", 9096) - 编译并运行:
shell
go build main.go
./kom - 访问MCP Server:
shell
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内的文件。