使用客户端go API列出部署控制器管理的POD不工作

使用客户端go API列出部署控制器管理的POD不工作,go,kubernetes,kubernetes-apiserver,client-go,Go,Kubernetes,Kubernetes Apiserver,Client Go,我在go中使用本机客户端go API来获取由给定命名空间下的部署类型控制器管理的POD列表(“默认”),但返回的列表不包含POD列表 labelSelector:=labels.Set(obj.Spec.Selector.MatchLabels) 其中,obj的类型为*appsv1.Deploymentfrom podsList,err:=getpodslist(string(labelSelector.AsSelector().string()),kubeClient,res.Namespa

我在go中使用本机客户端go API来获取由给定命名空间下的部署类型控制器管理的POD列表(“默认”),但返回的列表不包含POD列表

labelSelector:=labels.Set(obj.Spec.Selector.MatchLabels)
其中,
obj
的类型为
*appsv1.Deployment
from

podsList,err:=getpodslist(string(labelSelector.AsSelector().string()),kubeClient,res.Namespace)
函数定义为

func getPodList(labelSelector字符串,client kubernetes.Interface,ns字符串)(*corev1.PodList,error){
选项:=metav1.ListOptions{
标签选择器:标签选择器,
}
podList,err:=client.CoreV1().Pods(ns).List(选项)
返回播客列表,错误
}
返回的类型-应包含在我返回的信息中不可用的
Items[]Pod
切片

在Go代码中使用以下包

appsv1“k8s.io/api/apps/v1”
metav1“k8s.io/apimachinery/pkg/API/meta/v1”
“k8s.io/API机械/包装/标签”
“k8s.io/client go/kubernetes”

我似乎一直都在使用它,但只是错误地处理了
CoreV1().Pods(ns).List(options)
的返回类型。它返回一个指向
播客列表
-

这是我编写的最简单的代码,它可能对后代有用

package main

import (
        "fmt"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/clientcmd"
        "os"
        "path/filepath"
)

func main() {

        kubeconfig := filepath.Join(
                os.Getenv("HOME"), ".kube", "config",
        )

        // Initialize kubernetes-client
        cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
        if err != nil {
                fmt.Printf("Error building kubeconfig: %v\n", err)
                os.Exit(1)
        }

        // create new client with the given config
        // https://pkg.go.dev/k8s.io/client-go/kubernetes?tab=doc#NewForConfig
        kubeClient, err := kubernetes.NewForConfig(cfg)
        if err != nil {
                fmt.Printf("Error building kubernetes clientset: %v\n", err)
                os.Exit(2)
        }

        // use the app's label selector name. Remember this should match with 
        // the deployment selector's matchLabels. Replace <APPNAME> with the 
        // name of your choice
        options := metav1.ListOptions{
                LabelSelector: "app=<APPNAME>",
        }

        // get the pod list
        // https://pkg.go.dev/k8s.io/client-go@v11.0.0+incompatible/kubernetes/typed/core/v1?tab=doc#PodInterface
        podList, _ := kubeClient.CoreV1().Pods("default").List(options)

        // List() returns a pointer to slice, derefernce it, before iterating
        for _, podInfo := range (*podList).Items {
                fmt.Printf("pods-name=%v\n", podInfo.Name)
                fmt.Printf("pods-status=%v\n", podInfo.Status.Phase)
                fmt.Printf("pods-condition=%v\n", podInfo.Status.Conditions)
        }
}
主程序包
进口(
“fmt”
metav1“k8s.io/apimachinery/pkg/API/meta/v1”
“k8s.io/client go/kubernetes”
“k8s.io/client go/tools/clientcmd”
“操作系统”
“路径/文件路径”
)
func main(){
kubeconfig:=filepath.Join(
os.Getenv(“HOME”)、“.kube”、“config”,
)
//初始化kubernetes客户端
cfg,err:=clientcmd.BuildConfigFromFlags(“,kubeconfig)
如果错误!=零{
fmt.Printf(“生成kubeconfig时出错:%v\n”,错误)
操作系统退出(1)
}
//使用给定的配置创建新客户端
// https://pkg.go.dev/k8s.io/client-go/kubernetes?tab=doc#NewForConfig
kubeClient,err:=kubernetes.NewForConfig(cfg)
如果错误!=零{
fmt.Printf(“生成kubernetes客户端集时出错:%v\n”,错误)
操作系统出口(2)
}
//使用应用程序的标签选择器名称。请记住,此名称应与
//部署选择器的匹配标签。替换为
//你选择的名字
选项:=metav1.ListOptions{
标签选择器:“应用程序=”,
}
//获取pod列表
// https://pkg.go.dev/k8s.io/client-go@v11.0.0+不兼容/kubernetes/typed/core/v1?tab=doc#PodInterface
podList,u:=kubeClient.CoreV1().Pods(“默认”).List(选项)
//List()返回一个指向切片的指针,在迭代之前取消对它的引用
对于u,podInfo:=范围(*podList)。项{
fmt.Printf(“pods name=%v\n”,podInfo.name)
fmt.Printf(“pods状态=%v\n”,PODDINFO.status.Phase)
fmt.Printf(“pods条件=%v\n”,PODDInfo.Status.Conditions)
}
}

我似乎一直都在使用它,但只是错误地处理了
CoreV1().Pods(ns).List(options)
的返回类型。它返回一个指向
播客列表
-

这是我编写的最简单的代码,它可能对后代有用

package main

import (
        "fmt"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/tools/clientcmd"
        "os"
        "path/filepath"
)

func main() {

        kubeconfig := filepath.Join(
                os.Getenv("HOME"), ".kube", "config",
        )

        // Initialize kubernetes-client
        cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
        if err != nil {
                fmt.Printf("Error building kubeconfig: %v\n", err)
                os.Exit(1)
        }

        // create new client with the given config
        // https://pkg.go.dev/k8s.io/client-go/kubernetes?tab=doc#NewForConfig
        kubeClient, err := kubernetes.NewForConfig(cfg)
        if err != nil {
                fmt.Printf("Error building kubernetes clientset: %v\n", err)
                os.Exit(2)
        }

        // use the app's label selector name. Remember this should match with 
        // the deployment selector's matchLabels. Replace <APPNAME> with the 
        // name of your choice
        options := metav1.ListOptions{
                LabelSelector: "app=<APPNAME>",
        }

        // get the pod list
        // https://pkg.go.dev/k8s.io/client-go@v11.0.0+incompatible/kubernetes/typed/core/v1?tab=doc#PodInterface
        podList, _ := kubeClient.CoreV1().Pods("default").List(options)

        // List() returns a pointer to slice, derefernce it, before iterating
        for _, podInfo := range (*podList).Items {
                fmt.Printf("pods-name=%v\n", podInfo.Name)
                fmt.Printf("pods-status=%v\n", podInfo.Status.Phase)
                fmt.Printf("pods-condition=%v\n", podInfo.Status.Conditions)
        }
}
主程序包
进口(
“fmt”
metav1“k8s.io/apimachinery/pkg/API/meta/v1”
“k8s.io/client go/kubernetes”
“k8s.io/client go/tools/clientcmd”
“操作系统”
“路径/文件路径”
)
func main(){
kubeconfig:=filepath.Join(
os.Getenv(“HOME”)、“.kube”、“config”,
)
//初始化kubernetes客户端
cfg,err:=clientcmd.BuildConfigFromFlags(“,kubeconfig)
如果错误!=零{
fmt.Printf(“生成kubeconfig时出错:%v\n”,错误)
操作系统退出(1)
}
//使用给定的配置创建新客户端
// https://pkg.go.dev/k8s.io/client-go/kubernetes?tab=doc#NewForConfig
kubeClient,err:=kubernetes.NewForConfig(cfg)
如果错误!=零{
fmt.Printf(“生成kubernetes客户端集时出错:%v\n”,错误)
操作系统出口(2)
}
//使用应用程序的标签选择器名称。请记住,此名称应与
//部署选择器的匹配标签。替换为
//你选择的名字
选项:=metav1.ListOptions{
标签选择器:“应用程序=”,
}
//获取pod列表
// https://pkg.go.dev/k8s.io/client-go@v11.0.0+不兼容/kubernetes/typed/core/v1?tab=doc#PodInterface
podList,u:=kubeClient.CoreV1().Pods(“默认”).List(选项)
//List()返回一个指向切片的指针,在迭代之前取消对它的引用
对于u,podInfo:=范围(*podList)。项{
fmt.Printf(“pods name=%v\n”,podInfo.name)
fmt.Printf(“pods状态=%v\n”,PODDINFO.status.Phase)
fmt.Printf(“pods条件=%v\n”,PODDInfo.Status.Conditions)
}
}