首页 > 解决方案 > 如何使用 Kubernetes API 和节点操作系统来唯一标识一个 Kubernetes 节点?

问题描述

我有 2 个在 Kubernetes 环境中运行的组件。一个是列出集群中的所有节点(使用 Kubernetes API),另一个是向第一个报告它运行的节点的详细信息。

我希望我的第一个组件将报告的节点从第二个组件匹配到第一个组件列表中的节点。

为了做到这一点,我需要两件事:

  1. 确定 Kubernetes 集群中节点的唯一值。
  2. 从两个不同的地方获取节点的相同 ID - Kubernetes API 和节点本身。

识别节点:

我正在尝试识别 Kubernetes 节点。但我仍然无法获得节点的唯一标识符。

起初,我以为字段 machine-id 是唯一的,但事实并非如此(克隆节点时复制)。然后我创建了一个识别公式,由_组成。

这个公式不是唯一的,但它现在运行得很好。

使用 2 种不同的方法获取相同的节点 ID:

使用 Kubernetes API 以及通过在节点的操作系统上运行命令来获取节点的 machine_id 和主机名非常容易。我面临的问题是,在某些情况下,ID 不匹配。特别是,主机名不相同。 使用 Kubernetes API 获取主机名不会返回节点的真实主机名。 我一直在 IKS 和 ICP 上遇到这个问题。

是否有正常的方法来获取 Kubernetes 节点的唯一 ID?通过在节点上运行命令并使用 API 将返回相同结果的一种?

标签: kubernetesibm-cloudiks

解决方案


您将使用节点名称,如 API 对象上的名称。您可以使用带有字段 ref 或向下 api 卷的 env var 将其传递给 DaemonSet 进程。


推荐阅读