【问题标题】:How to uniquely identify a Kubernetes node using Kubernetes API and the node operating system?如何使用 Kubernetes API 和节点操作系统来唯一标识一个 Kubernetes 节点?
【发布时间】:2020-04-20 07:56:10
【问题描述】:

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

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

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

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

识别节点:

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

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

这个公式不是唯一的,但它目前运行良好。

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

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

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

【问题讨论】:

    标签: kubernetes ibm-cloud iks


    【解决方案1】:

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

    【讨论】:

    • 我试图避免在部署过程中发生变化。
    • 为什么? fieldRef 功能正是为此目的而构建的。
    • 因为我不能强迫安装我的程序的客户改变他们的部署。
    • 他们无需更改任何内容,只需提供 Helm 图表即可。
    • 知道了。你知道我是否可以传递节点主机名吗?我看到 spec.nodeName 可用,但我想使用主机名(我想做最少的必要更改)
    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2019-01-21
    • 2020-07-08
    • 2019-08-02
    • 2020-04-10
    • 2020-09-27
    相关资源
    最近更新 更多