1

团队,

我们需要在 K8s 集群的工作节点上推出一些驱动程序,我们的流程如下:

  1. 警戒线节点[不再调度]
  2. 等待作业完成
  3. 破坏

有没有一种方法可以使用 K8s 选项本身自动执行此操作,而不是每次都编写一些 bash 脚本来进行这些检查,因为我们不知道 pod 何时完成。那么,我们是否可以配置主 API 服务器来检查警戒节点并在它没有运行作业时销毁?

4

1 回答 1

1

您可以使用Go ClientPython ClientJava Client编写自己的应用程序,基本上这样做:

$ kubectl apply -f yourjob.yaml
$ kubectl cordon <nodename>
$ kubectl wait --for=condition=complete job/myjob
$ kubectl drain <nodename>
# Terminate your node if drain returns successfully

如果这是一种常见的模式,您也可以利用带有自定义资源定义 ( CRD ) 的自定义控制器 ( operator ) 来执行此操作。您必须嵌入与 API 服务器对话的应用程序代码。

于 2018-12-17T21:33:50.457 回答