使用 k8s rest api 从特定节点获取 Pods

Get Pods from a Particular node using k8s rest api

是否有任何 k8s rest api 端点可以获取特定节点的所有 pods 及其详细信息。 我使用 minikube 并使用 kubectl proxy --port=7070 & 启动代理。 我们有像 GET /api/v1/namespaces/{namespace-name}/pods 这样的端点。我们是否有任何类似的端点可以访问属于特定节点的 pods?我不想使用 kubectl 命令。

I dont want to use kubectl commands.

kubectl 是 k8s API serverREST 客户端。如果您不想使用它 - 您将需要手动执行相同的请求。

没有“合法”的方式可以在不与 API Server 交谈的情况下从 k8s 集群获取信息。 API Server 是唯一的真实来源,所有控制器都使用 API Server 来执行所需的更改。因此,您可能应该依赖 API Server.

提供的信息

您可以使用 kubectl 通过以下方式为特定节点获取 pods:

kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<node>

看看这个:

您也可以在不使用 kubectl 的情况下执行此操作 - 阅读此内容:The Kubernetes API

您可以使用 client-go 库与 API server 对话。这是一个例子。

import (
     "github.com/golang/glog"

     "k8s.io/api/core/v1"
     "k8s.io/apimachinery/pkg/fields"
     "k8s.io/client-go/kubernetes"
     "k8s.io/client-go/tools/cache"
     "k8s.io/client-go/tools/clientcmd"
)
func main() {
    config, err := clientcmd.BuildConfigFromFlags("", "")
    if err != nil {
        glog.Errorln(err)
    }
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        glog.Errorln(err)
    }
    pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})
    if err != nil {
        panic(err.Error())
    }
}