kwok
中的 CEL 表达式 #
该页面简要说明了如何在 kwok
CR 中编写 CEL 表达式。
以下是 kwok
中包含基于 CEL 字段的所有 CR 的列表。
编写表达式时,必须遵循 CEL 语言规范。有关 CEL 的预定义函数,请参阅 CEL 预定义函数。
除了内置函数之外,kwok
还提供了一些自定义扩展函数。下面给出了所有扩展函数及其用法详尽列表。
Now()
:不带任何参数,返回当前时间戳。Rand()
:不带任何参数,返回一个随机的float64
值。SinceSecond()
返回给定资源(pod
或node
)创建以来的秒数。例如:SinceSecond(pod)
,node.SinceSecond(node)
。UnixSecond()
返回给定时间(time.Time
类型)的 Unix 时间。例如:,UnixSecond(Now())
,UnixSecond(node.metadata.creationTimestamp)
。Quantity()
返回给定数量值的一个 float64 值。例如:Quantity("100m")
、Quantity("10Mi")
。Usage()
返回当前瞬时资源使用情况,其中包含 [ResourceUsage (ClusterResourceUsage)] 中的模拟数据。例如:Usage(pod, "memory")
、Usage(node, "memory")
、Usage(pod, "memory", container.name)
返回资源(pod、节点或容器)的当前工作集(以字节为单位)。CumulativeUsage()
返回秒为单位的累积资源使用情况,其中包含 [ResourceUsage (ClusterResourceUsage)] 中给出的模拟数据。例如:CumulativeUsage(pod, "cpu")
、CumulativeUsage(node, "cpu")
、CumulativeUsage(pod, "cpu", container.name)
返回资源(pod、节点或容器)消耗的累积 CPU 时间(以核心秒为单位)。
此外,kwok
提供了三个特殊的 CEL 变量 node
、pod
和 container
,这些变量可用于表达式中。这三个变量分别设置为相应的节点、pod、容器资源对象,用户可以通过 CEL 字段选择表达式(e.f
格式)简单地引用资源对象的任何嵌套字段。例如,您可以使用表达式 node.metadata.name
来获取节点名称。
具有至少一个参数的函数可以在接收器调用样式中调用。也就是说,像f(e1, e2)
这样的函数调用也可以用e1.f(e2)
样式调用。例如,您可以使用pod.Usage("memory")
作为Usage(pod, "memory")
的替代方法。
值得注意的是,某些扩展函数的使用仅限于特定的 CR 和上下文,因为它们不是通用的,而是为特殊的评估任务设计的。详细限制如下所述。
函数限制 #
函数 Usage()
和 CumulativeUsage()
只能在指标资源中使用。对于上面列出的其他函数,用户还可以在 ResourceUsage 和 ClusterResourceUsage 中使用它们来构建动态资源使用模式。
原因在于,当 kwok
评估函数 Usage()
或 CumulativeUsage()
时,它实际上会获取 ResourceUsage 和 ClusterResourceUsage 中给出的模拟数据来获取指标值。因此,请确保在使用函数 Usage()
和 CumulativeUsage()
时,还提供了具有所需资源类型(cpu 或内存)的关联 ResourceUsage 或 ClusterResourceUsage。
变量限制 #
在指标资源中使用三个特殊 CEL 变量 node
、pod
和 container
时,应遵循以下规则。
- 当
dimension
为node
时:只能使用node
变量。 - 当
dimension
为pod
时:只能使用node
、pod
。 - 当
dimension
为container
时:node
、pod
、container
都可以使用。