kubevela中利用Application对象对底层资源进行了封装,屏蔽了底层基础架构,但是这样对Application创建的资源状态的监控,就只能依赖Application的状态透出,但状态信息简略、状态实时反馈性差,VelaQL就是为了提升Application的可观测性,用于查询应用级别的资源状态。
并且velaQL 对标的是 PromQL ,,提供了和 PromQL 类似语法的查询语句,期望能够成为应用监控领域的 Prometheus。
view{parameter1=value1,parameter2=value2}
并且,vela apiserver内置了3种比较通用的查询视图:
1、component-pod-view 对应用下某个组件创建出的 pod 列表的查询
curl --location -g --request GET \
http://127.0.0.1:8000/api/v1/query?velaql=component-pod-view{appNs=default,appName=demo,name=demo}
2、pod-view 对一个 pod 详细状态的查询,包括容器状态以及 pod 产生的事件
curl --location -g --request GET \
http://127.0.0.1:8000/api/v1/query?velaql=pod-view{name=demo-1-bf6799bb5-dpmk6,namespace=default}
3、resource-view 获取集群中某类资源的列表
curl --location -g --request GET \
'http://127.0.0.1:8000/api/v1/query?velaql=resource-view{type=ns}'
每次使用 velaQL 时,系统都会从 vela-system 命名空间下查找和视图同名的 configMap 提取出 template的CUE模板来进行查询操作,所以要保证你的自定义视图存储在 vela-system 下(默认)。
4、velaql流程
velaql执行流程:
// 1、组装一个workflowstep,用于完成QueryView
// 2、通过provider注册了需要的方法,并提供了TaskLoader用于加载cue模板
// 3、使用TaskLoader加载cue模板,并生成TaskGenerator函数
// 4、执行上边返回的TaskGenerator函数,并生成executor,然后并把handler放到了对应的executor,然后是很成了taskRunnertaskRunner主要有run和checkPending两个函数,并返回taskRunner
// 5、执行TaskRunner的Run方法,run方法中会将workflowstep的cue模板和参数生成的cue.value合并成一个新的cue.value作为taskValue,然后调用doSteps对cue中#component-apply进行处理,对应会执行具体的provider注册的某个方法