"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How can I retrieve detailed pod information using the Kubernetes go-client, similar to the `kubectl get pods` command?

How can I retrieve detailed pod information using the Kubernetes go-client, similar to the `kubectl get pods` command?

Published on 2024-11-08
Browse:734

How can I retrieve detailed pod information using the Kubernetes go-client, similar to the `kubectl get pods` command?

Kubernetes go-client: Retrieve Pod Details Like kubectl get pods

To obtain pod details in a Kubernetes cluster using the client-go library, similar to the kubectl get pods -n command, follow these steps:

Create a Kubernetes client: Refer to the client-go documentation for details on obtaining a Kubernetes client.

Specify the target namespace: Determine the namespace where the desired pods reside, similar to the -n option in kubectl.

Retrieve the pod list: Utilize the client's CoreV1() method to interface with the Pods resource within the specified namespace. Use the List() method to obtain a PodList object containing all pods in the namespace.

Extract pod information: Iterate through the PodList, accessing each pod's metadata and status information. For detailed information, refer to the Pod and PodStatus struct definitions in the Kubernetes API documentation.

Extract additional details: If required, calculate attributes such as pod age, container restarts, and ready status using the pod's creation timestamp and container statuses.

Here's a sample code snippet that demonstrates how to get the pod name, status, ready status, restarts, and age:

func GetPods(client *meshkitkube.Client, namespace string) (*v1core.PodList, error) {
    podInterface := client.KubeClient.CoreV1().Pods(namespace)
    podList, err := podInterface.List(context.TODO(), v1.ListOptions{})
    return podList, err
}
// Iterate through pods and collect required data
for _, pod := range podList.Items {
    podCreationTime := pod.GetCreationTimestamp()
    age := time.Since(podCreationTime.Time).Round(time.Second)
    podStatus := pod.Status
    containerRestarts, containerReady, totalContainers := 0, 0, len(pod.Spec.Containers)
    for container := range pod.Spec.Containers {
        containerRestarts  = podStatus.ContainerStatuses[container].RestartCount
        if podStatus.ContainerStatuses[container].Ready {
            containerReady  
        }
    }
    name := pod.GetName()
    ready := fmt.Sprintf("%v/%v", containerReady, totalContainers)
    status := fmt.Sprintf("%v", podStatus.Phase)
    restarts := fmt.Sprintf("%v", containerRestarts)
    ageS := age.String()
    data = append(data, []string{name, ready, status, restarts, ageS})
}

This process will provide the same data that kubectl get pods -n offers.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3