有谁知道在 client-go 上执行此操作的方法或 kubectl describe pod 使用的 API 资源

Does anyone know the way to do this on a client-go or the API resources that kubectl describe pod uses

我找不到合适的方法来执行此操作。

有谁知道在 client-go 上执行此操作的方法或 kubectl describe pod 使用的 API 资源?

在kubectl describe的代码中可以看到command

这是一个使用 client-go 获取 pod 的示例代码:

/*
A demonstration of get pod using client-go
Based on client-go examples: https://github.com/kubernetes/client-go/tree/master/examples
To demonstrate, run this file with `go run <filename> --help` to see usage
*/

package main

import (
    "context"
    "flag"
    "fmt"
    "os"
    "path/filepath"

    v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/client-go/util/homedir"
)

func main() {
    podName := flag.String("pod-name", "", "name of the required pod")
    namespaceName := flag.String("namespace", "", "namespace of the required pod")
    var kubeconfig *string
    if config, exist := os.LookupEnv("KUBECONFIG"); exist {
        kubeconfig = &config
    } else if home := homedir.HomeDir(); home != "" {
        kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
    } else {
        kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
    }
    flag.Parse()

    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
    if err != nil {
        panic(err)
    }
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        panic(err)
    }

    podClient := clientset.CoreV1().Pods(*namespaceName)
    fmt.Println("Getting pod...")
    result, err := podClient.Get(context.TODO(), *podName, v1.GetOptions{})
    if err != nil {
        panic(err)
    }
    // Example fields
    fmt.Printf("%+v\n", result.Name)
    fmt.Printf("%+v\n", result.Namespace)
    fmt.Printf("%+v\n", result.Spec.ServiceAccountName)
}