【问题标题】:Get Pods from a Particular node using k8s rest api使用 k8s rest api 从特定节点获取 Pod
【发布时间】:2020-12-21 11:35:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我不想使用 kubectl 命令。

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

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

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

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

    看看这个:Kubernetes API - gets Pods on specific nodes

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

    【讨论】:

    • 如果您必须使用 REST API,您可以将 -v9 传递给上述命令以使其详细。 v9 将 HTTP 请求打印为正确的 curl 请求,您可以复制并尝试。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2021-11-19
      • 2020-07-25
      • 2017-05-26
      • 2013-04-02
      • 2013-06-29
      相关资源
      最近更新 更多