使用K8S Rest API从特定节点获取Pod

时间:2020-09-02 10:00:55

标签: go kubernetes minikube kubernetes-pod client-go

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

2 个答案:

答案 0 :(得分:2)

我不想使用kubectl命令。

{% for newdatain data%} <tr> <td>lesson_name</td> <td>lesson_day </td> <td>course name(i want to display)</td> </tr> {% endfor %} 是k8 kubectl的{​​{1}}客户端。如果您不想使用它-您将需要手动执行相同的请求。

没有与REST对话就无法从k8s集群获取信息的“合法”方法。 API server是唯一的事实来源,所有控制器都在使用API Server执行所需的更改。因此,可能您应该依靠API Server提供的信息。

您可以使用API Server通过以下方式获取特定节点的吊舱:

API Server

检查以下内容:Kubernetes API - gets Pods on specific nodes

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

答案 1 :(得分:0)

您可以使用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())
    }
}