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都可以使用。