GKE 上的抢占式云 运行

Preemptive Cloud Run on GKE

是否可以在具有抢占式节点的 GKE (Anthos) Kubernetes 集群上创建云 运行?如果可以,您还可以启用 gke-node-pool-shifter 和 gke-pvm-killer 等插件或者它会干扰云 运行 操作,例如自动缩放 pods

https://hub.helm.sh/charts/rimusz/gke-node-pool-shifter

https://hub.helm.sh/charts/rimusz/gke-pvm-killer

从技术上讲,GKE 集群上的云 运行 归根结底仍然是一个 GKE 集群,因此它可以具有抢占式节点池。

但是,一些 Knative Serving 组件,例如 activatorautoscaler 处于服务请求的热路径中。您需要确保它们不会最终进入可抢占池。同样,controllerwebhook 在某种程度上是 Knative API 对象的控制平面生命周期的核心,因此您还需要确保这些 pods 以非可抢占节点池。

其次,Knative(目前)不支持节点选择器或 taints/tolerations:https://knative.tips/pod-config/node-affinity/ 它根本无法让您指定 nodeSelector 或其他关联字段Knative 服务对象的 Pod 模板。

因此,你必须找到一种方法(比如为 Knative 创建的 pods 实现你的变异准入网络钩子)来将这样的节点选择器添加到 Pods,这是非常乏味的。

但是,通过结合节点污点和 pd 容忍度,我认为您可以让 Knative 系统组件最终进入不可抢占池,而其他所有内容(即 Knative 创建的 pods)进入其他节点 (即抢占节点)。