<p>I'm trying to use the <a href="https://github.com/kubernetes/client-go" rel="nofollow noreferrer">Kubernetes client-go</a> to access pod details in a cluster.</p>
<p>I want to use it to get the details of pods running in one particular namespace, similar to <code>kubectl get pods -n &lt;my namespace&gt;</code>.</p>
<p>The details I want are the <code>name</code>, <code>status</code>, <code>ready</code>, <code>restarts</code> and <code>age</code> of the pod.</p>
<p>How can I get those data?</p>

Navendu Pottekkat
<p>So, I wrote a function that takes in a Kubernetes client (refer the client-go for details on making one) and a namespace and returns all the pods available-</p>
<pre class="lang-golang prettyprint-override"><code>func GetPods(client *meshkitkube.Client, namespace string) (*v1core.PodList, error) {
    // Create a pod interface for the given namespace
    podInterface := client.KubeClient.CoreV1().Pods(namespace)

    // List the pods in the given namespace
    podList, err := podInterface.List(context.TODO(), v1.ListOptions{})

    if err != nil {
        return nil, err
    }
    return podList, nil
}
</code></pre>
<p>After getting all the pods, I used a loop to run through all the pods and containers within each pod and manually got all the data I required-</p>
<pre class="lang-golang prettyprint-override"><code>// List all the pods similar to kubectl get pods -n &lt;my namespace&gt;
            for _, pod := range podList.Items {
                // Calculate the age of the pod
                podCreationTime := pod.GetCreationTimestamp()
                age := time.Since(podCreationTime.Time).Round(time.Second)

                // Get the status of each of the pods
                podStatus := pod.Status

                var containerRestarts int32
                var containerReady int
                var totalContainers int

                // If a pod has multiple containers, get the status from all
                for container := range pod.Spec.Containers {
                    containerRestarts += podStatus.ContainerStatuses[container].RestartCount
                    if podStatus.ContainerStatuses[container].Ready {
                        containerReady++
                    }
                    totalContainers++
                }

                // Get the values from the pod status
                name := pod.GetName()
                ready := fmt.Sprintf(&quot;%v/%v&quot;, containerReady, totalContainers)
                status := fmt.Sprintf(&quot;%v&quot;, podStatus.Phase)
                restarts := fmt.Sprintf(&quot;%v&quot;, containerRestarts)
                ageS := age.String()

                // Append this to data to be printed in a table
                data = append(data, []string{name, ready, status, restarts, ageS})
            }
</code></pre>
<p>This will result in the exact same data as you would get when running <code>kubectl get pods -n &lt;my namespace&gt;</code>.</p>
