August 02, 2020
Read Kubernetes API data using Golang
Create the API client.
import (
"fmt"
"context"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// use the current context in kubeconfig
config, err := clientcmd.BuildConfigFromFlags("", "<path_to_KUBECONFIG>")
if err != nil {
panic(err.Error())
}
// create the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}Usage examples:
- Read data about servers
nodeList, err := clientset.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}- Read data about pods
namespace := "example" // leave empty to get data from all namespaces
podList, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
panic(err.Error())
}In the above examples, ListOptions can take two important strings: field selectors and label selectors. This can be used for filtering results.
metav1.ListOptions{
LabelSelector: "labelName=labelKey",
FieldSelector: "spec.nodeName=<node_name>", // Example for filtering by node name
}Field selectors and label selectors work the same way as the CLI options for kubectl. The same rules apply here.
Further reading
Official docs on Field Selectors and Labels.