0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

client-goを利用してGolangからKubernetesのPod一覧を取得するサンプル

Posted at

kubectlを利用する場合


aws eks update-kubeconfig --name vamdemic-development-eks-cluster

kube-systemのnamespaceでは、12のPodが起動中

yuta:~/go-kubernentes (master *+=) $ kubectl get pod -n kube-system 
NAME                                      READY   STATUS    RESTARTS   AGE
alb-ingress-controller-5b4b5fd775-8vxt7   1/1     Running   1          16d
aws-node-829mc                            1/1     Running   0          16d
aws-node-q4d67                            1/1     Running   0          16d
coredns-79769ff86-h2tck                   1/1     Running   0          16d
coredns-79769ff86-wclkd                   1/1     Running   0          16d
ebs-csi-controller-587cb4db9b-6j8xz       4/4     Running   3          16d
ebs-csi-controller-587cb4db9b-w5s5s       4/4     Running   2          16d
ebs-csi-node-gbpx4                        3/3     Running   0          16d
ebs-csi-node-l8rx5                        3/3     Running   0          16d
efs-csi-node-v6m4m                        3/3     Running   0          16d
efs-csi-node-vtf5r                        3/3     Running   0          16d
kube-proxy-7gbmn                          1/1     Running   0          16d
kube-proxy-8h4tk                          1/1     Running   0          16d

GoでPod一覧を取得する場合

main.go
package main

import (
	"context"
	"fmt"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"log"
	"os"
	"path/filepath"
)

func main() {
	// Kubeconfigのファイルパスを指定
	kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
	config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
	if err != nil {
		log.Fatal(err)
	}

	// Kubeconfigを読み込む
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatal(err)
	}

	// Pod一覧を呼び出す
	namespace := "kube-system"
	pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		log.Fatalln("failed to get pods:", err)
	}

	// print pods
	// pods.Items: []v1.Pod
	for i, pod := range pods.Items {
		fmt.Printf("[%d] %s\n", i, pod.GetName())
	}
}

出力結果

yuta:~/go-kubernentes (master *+=) $ go run main.go 
[0] alb-ingress-controller-5b4b5fd775-8vxt7
[1] aws-node-829mc
[2] aws-node-q4d67
[3] coredns-79769ff86-h2tck
[4] coredns-79769ff86-wclkd
[5] ebs-csi-controller-587cb4db9b-6j8xz
[6] ebs-csi-controller-587cb4db9b-w5s5s
[7] ebs-csi-node-gbpx4
[8] ebs-csi-node-l8rx5
[9] efs-csi-node-v6m4m
[10] efs-csi-node-vtf5r
[11] kube-proxy-7gbmn
[12] kube-proxy-8h4tk

参考

https://pizi.netlify.app/posts/kubernetes-client-go-example/#node%E3%81%AE%E5%8F%96%E5%BE%97
https://github.com/kubernetes/client-go

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?