如何通过客户端获取Kubernetes节点的状态?

How to get the status of Kubernetes nodes via the client?

我想通过 go 客户端获取 Kubernetes 中的节点列表及其状态。我在用 clientset.CoreV1().Nodes().List(metav1.ListOptions{}) 并且我能够获取节点列表和一些信息,例如节点标签,但我在那里找不到 status.phase(对于 pods 给我状态)。

我搜索并找到了 NodeCondition (https://github.com/kubernetes/api/blob/9b64426eca51a74faa7cc9bd732a533d339c69c2/core/v1/types.go#L4911),但我找不到任何关于如何使用它的文档,而且我自己也无法让它工作。有人可以告诉我如何通过客户端获取节点的状态吗?

您可以通过node.Status.Condition

访问它
nodes, _ := client.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})

for _, node := range nodes.Items {
    fmt.Printf("%s\n", node.Name)
    for _, condition := range node.Status.Conditions {
        fmt.Printf("\t%s: %s\n", condition.Type, condition.Status)
    }
}

打印:

dev-master-01
        NetworkUnavailable: False
        MemoryPressure: False
        DiskPressure: False
        PIDPressure: False
        Ready: True
dev-master-02
        NetworkUnavailable: False
        MemoryPressure: False
        DiskPressure: False
        PIDPressure: False
        Ready: True
dev-master-03
        NetworkUnavailable: False
        MemoryPressure: False
        DiskPressure: False
        PIDPressure: False
        Ready: True