Kom - 高效便捷的 Kubernetes 资源查询工具
Kubernetes 提供了丰富的 API 和资源类型,但随着资源种类的增加,如何快速、简洁地查询和筛选所需资源变得尤为重要。kom 今天新增了使用SQL查询k8s资源的功能。
SQL功能主要特点
-
支持所有资源类型
Kom 支持查询 Kubernetes 集群内注册的所有资源类型,包括内置的资源(如 Pod、Deployment、Service 等)和自定义资源(CRD)。无论是 Kubernetes 内置资源还是自定义 CRD,您都可以通过 SQL 查询快速访问。 -
灵活的查询条件
使用 SQL 查询时,支持常见的查询操作符,如=,!=,>=,<=,<>,like,in,not in,and,or,between,方便用户根据需要进行筛选。 -
简洁高效
只需要通过一个 SQL 语句,就可以完成对 Kubernetes 资源的查询操作。并且查询字段默认支持*,返回所有资源字段。 -
支持排序
您可以通过指定排序字段,对查询结果进行排序。默认按创建时间倒序排列,方便查看最新的资源状态。
使用示例
// 查询kube-system、default命名空间下的pod,并按创建时间倒排。
sql := "select * from pod where `metadata.namespace`='kube-system' or `metadata.namespace`='default' order by `metadata.creationTimestamp` desc "
var list []v1.Pod
err := kom.DefaultCluster().Sql(sql).List(&list).Error
for _, d := range list {
fmt.Printf("List Items foreach %s,%s at %s \n", d.GetNamespace(), d.GetName(), d.GetCreationTimestamp())
}
查询 Kubernetes 内置资源
sql := "select * from pod where `metadata.namespace`='kube-system' or `metadata.namespace`='default' order by `metadata.creationTimestamp` asc"
var list []v1.Pod
err := kom.DefaultCluster().Sql(sql).List(&list).Error
for _, d := range list {
fmt.Printf("List Items foreach %s,%s at %s \n", d.GetNamespace(), d.GetName(), d.GetCreationTimestamp())
}
在上述代码中,我们使用 SQL 语句查询了 pod 资源,筛选出了 kube-system 和 default 命名空间中的 Pod,并按创建时间升序排列。
查询 CRD 资源
sql := "select * from vm where (`metadata.namespace`='kube-system' or `metadata.namespace`='default')"
var list []unstructured.Unstructured
err := kom.DefaultCluster().Sql(sql).List(&list).Error
for _, d := range list {
fmt.Printf("List Items foreach %s,%s\n", d.GetNamespace(), d.GetName())
}
在这个示例中,查询了 kubevirt 的自定义资源 vm,可以快速筛选出特定命名空间的资源信息。
如何开始
-
将 Kom 集成到您的项目中,可以通过 GitHub 获取源代码并根据文档进行配置。
-
根据需要编写 SQL 查询语句,灵活筛选和排序 Kubernetes 资源。
-
使用
Sql()方法与集群交互,获取查询结果。
安装
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()
// 其他逻辑
}
使用
sql := "select * from deploy where `metadata.namespace`='kube-system' or `metadata.namespace`='default' order by `metadata.creationTimestamp` asc "
var list []v1.Deployment
err := kom.DefaultCluster().Sql(sql).List(&list).Error
for _, d := range list {
fmt.Printf("List Items foreach %s,%s at %s \n", d.GetNamespace(), d.GetName(), d.GetCreationTimestamp())
}
总结
使用sql查询k8s有没有感觉非常简单?