我使用以下查询来计算GKE集群中节点的成本(为了便于阅读而添加新行)
fun <Item, Key> TabLayout.bindTabs(items: List<Item>, toKey: (Item) -> Key, tab: (Item) -> TabLayout.Tab, bind: (Item, TabLayout.Tab) -> Unit) {
val old = (0 until tabCount).map { getTabAt(it)?.tag as Key }
val new = items.map(toKey)
val add = new - old
val remove = old - new
val keep = new.intersect(old)
val tagToChildren = (0 until tabCount).map { getTabAt(it) }.associateBy { it?.tag as Key }
val idToItem = items.associateBy(toKey)
remove.forEach { tagToChildren[it].let { removeTab(it) } }
keep.forEach { bind(idToItem[it]!!, tagToChildren[it]!!) }
add.forEach { key -> tab(idToItem[key]!!).also { it.tag = key }.also { addTab(it, items.indexOf(idToItem[key])) } }
}
如果集群具有可抢占节点,则它起作用,因为至少有一个节点具有sum(
kube_node_status_capacity_cpu_cores * on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labels{
label_cloud_google_com_gke_preemptible = "true"
}
) * 5.10 +
sum(
kube_node_status_capacity_cpu_cores * on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labels{
label_cloud_google_com_gke_preemptible = ""
}
) * 16.95
,因此第一个和运算符返回一个值。
当群集没有可预留节点时失败,因为没有label_cloud_google_com_gke_preemptible = "true"
的节点,因此第一个总和不返回值
是否可以修改查询以使第一个和返回0值?
答案 0 :(得分:2)
如果值不存在,您可以使用or
插入值:
(
sum(
kube_node_status_capacity_cpu_cores
* on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labels{label_cloud_google_com_gke_preemptible = "true"}
) * 5.10
or
vector(0)
)
+
sum(
kube_node_status_capacity_cpu_cores
* on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labels{label_cloud_google_com_gke_preemptible = ""}
) * 16.95