从属于 DaemonSet 的容器中,如何查找 "the node on which I am running" 上的标签?

From a container that is part of a DaemonSet, how can I look up the labels on "the node on which I am running"?

我有一项服务 运行 作为 DaemonSet 跨多个 kubernetes 节点。我想根据每个 DaemonSet pod 所在节点的标签做出一些策略决策 运行。在容器中,我如何知道此 pod 在哪个节点上 运行?有了这些信息,通过 API 查找节点标签应该相对容易。

我现在正在做的是将节点名称作为环境变量传入,如下所示:

          env:
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: spec.nodeName

这是获取此信息的正确方法吗?更具体地说,是否有任何类型的 API 电话可以回答“我在哪里?”这个问题?

回答您的问题“我怎么知道我在哪个节点上?”:

您的方法似乎是最好的方法 - 使用 the DownWard API 允许我们访问某些 pod 或容器的字段。在我们的例子中,它是可访问的 pod 字段 spec.nodeName

您可以使用两个选项来使用此 API:

公开 pod 信息

您也可以访问 Kubernetes API from a pod 并从此处获取此信息,但这是一种解决方法。最好利用节点的名称是 pod 的字段之一这一事实,并使用之前描述的 DownWard API,它是为此目的而制作的,在 Kubernetes 文档中有官方描述。