Kubernetes:从容器内部获取节点池名称

时间:2020-07-12 13:38:31

标签: kubernetes

我的Kubernetes集群运行着两个节点池(称为“ A”和“ B”),它们在我的Kubernetes集群上运行。我的部署是首选(使用“ nodeAffinity-> preferredDuringSchedulingIgnoredDuringExecution”功能)在节点池“ B”上运行。但是,如果节点池“ B”上的资源不足,那么Kubernetes将在节点池“ A”上分配新的Pod(第二选择)。

我的逻辑是检查pod是否位于节点池A上,并且没有要解决的任务(任务来自队列)-关闭pod。希望下一个实例将在节点池B上启动...

我在Pod中运行的应用程序知道队列何时为空。在这种情况下,我需要检查Pod是否在节点池A上运行。如果是,请关闭。

如何从Pod中找出调度Pod的节点的节点池?

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以向特定池中的所有节点添加特定标签,以将节点与另一个节点池中的其他节点区分开。

在窗格中定义如下所示的环境,该环境从spec.Nodename读取

env:
  - name: MY_NODE_NAME
    valueFrom:
      fieldRef:
        fieldPath: spec.nodeName

使用环境变量中的值,您可以在Kubernetes API下查询并检查标签以确定节点池。

GET /api/v1/nodes/{MY_NODE_NAME}

要通过kubernetes API调用,您可以使用任何受支持的语言使用kubernetes client library