1.kubectl命令
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n default
2.client-go 实现 demo
package main
import (
"context"
"fmt"
"strings"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)
var allResource []*unstructured.Unstructured = []*unstructured.Unstructured{}
var namespace string = "default"
func main() {
kconfig, _ := clientcmd.BuildConfigFromFlags("", "config")
clientSet, _ := kubernetes.NewForConfig(kconfig)
apiResourceLists, _ := clientSet.Discovery().ServerPreferredNamespacedResources()
for _, apiResourceList := range apiResourceLists {
for _, apiResource := range apiResourceList.APIResources {
if supportsListOperation(apiResource.Verbs) {
group, version := getGroupVersion(apiResourceList.GroupVersion)
getResourceList(group, version, apiResource.Name, namespace)
}
}
}
for _, resource := range allResource {
fmt.Printf("apiVersion: %s, Kind: %s, Name: %s\n", resource.GetAPIVersion(), resource.GetKind(), resource.GetName())
}
}
func getResourceList(group, version, resource string, namespace string) {
kconfig, _ := clientcmd.BuildConfigFromFlags("", "config")
dynamicClient, _ := dynamic.NewForConfig(kconfig)
gvr := schema.GroupVersionResource{
Group: group,
Version: version,
Resource: resource,
}
ctx := context.Background()
opts := metav1.ListOptions{}
unstruct_List, _ := dynamicClient.Resource(gvr).Namespace(namespace).List(ctx, opts)
for _, unstruct_item := range unstruct_List.Items {
allResource = append(allResource, &unstruct_item)
}
}
func getGroupVersion(gv string) (group, version string) {
arr := strings.Split(gv, "/")
if len(arr) == 1 {
return "", arr[0]
}
return arr[0], arr[1]
}
func supportsListOperation(verbs []string) bool {
for _, verb := range verbs {
if verb == "list" {
return true
}
}
return false
}