【问题标题】:Get NodeIP or HostIP from inside the pod for the same node从同一节点的 pod 内部获取节点 IP 或主机 IP
【发布时间】:2021-05-25 11:10:48
【问题描述】:

我有一个场景,我想从托管在同一节点(daemonset pod)上的 pod 内部获取节点的 IP 地址。因为,我想检查一下 - 如果 pod-A 已经存在于同一个节点上(使用该节点的 IP 地址识别)然后等待它终止,否则创建 pod -A 再次。在尝试在 K8s go-client 中实现相同的功能时,我无法找到从当前调度该 pod 的 pod 内部获取节点 IP 的方法。我遇到的最好的方法是这种方法:https://github.com/kubernetes/kubernetes/blob/v1.20.4/pkg/util/node/node.go#L149,但问题是它需要同时传递节点名称。有没有其他方法可以从 Pod 内部获取相同的信息?

【问题讨论】:

    标签: kubernetes kubernetes-go-client


    【解决方案1】:

    Pod 结构中的PodStatus 字段具有HostIP 字段,您可以使用该字段获取运行 pod 的节点的 IP。

    您可以查看示例 here,了解如何获取命名空间中的 pod 列表并对其进行迭代。

    【讨论】:

    • 感谢您的建议,但我想从 daemonset pod 中获取节点的 IP。现在,我获得的这个节点 IP 将用于从 daemonset pod 本身内部识别或创建不同的 pod。那么,有没有一种方法可以从已经运行的 pod 中获取 NodeIP 而无需查询名称(因为我可能从其中知道 daemonset pod 的名称)。您共享的示例建议列出命名空间中的所有 pod,但我想要做的是仅从同一个 pod 内部获取当前 pod 调度的 nodeIp。
    • 您可以遍历 pod 列表并找到当前 pod 及其具有节点 IP 的信息,或者我可能遗漏了什么。
    • 您还可以使用Get API:pod, _ := clientset.CoreV1().Pods(namespace).Get(pod.Name, metav1.GetOptions{}) 获取特定的 pod,并从其状态中获取节点 IP,如答案中所述。 see example here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    相关资源
    最近更新 更多