(横道・疑問)は気になって調べて概要は分かったものの詳細はよくわからんかったやつ

kubernetesclient-go って ?? 🤔

repository

kubernetes/client-go

利用例を見てみる

公式から最初に飛ばされるのは, in-cluster exsample と out-of-cluster exsample

in-cluster exsample

クラスタ内部(Pod として)からクラスタを操作するサンプル

数秒毎に Pod 数を出してくれる

無難に写経してみる

package main

import (
	"fmt"
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
)

func main() {
	config, err := rest.InClusterConfig()
	if err != nil {
		panic(err.Error())
	}
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}

	for {
		pods, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{})
		if err != nil {
			panic(err.Error())
		}
		fmt.Printf("There are %d pods in the cluster\\n", len(pods.Items))

		time.Sleep(time.Second * 5)
	}
}

動作(なぜかローカルの minikube で RBAC が有効になってて, default のサービスアカウントに参照権限を与える必要があった)

~/work/k8s-handson via 🐹 v1.14.4 
❯ kubectl logs pod/demo
panic: pods is forbidden: User "system:serviceaccount:default:default" cannot list resource "pods" in API group "" at the cluster scope

goroutine 1 [running]:
main.main()
        /Users/yasuhito.sato/work/k8s-handson/cmd/in-cluster/main.go:25 +0x1cd

~/work/k8s-handson via 🐹 v1.14.4 
❯ kubectl create clusterrolebinding default-view --clusterrole=view --serviceaccount=default:default
clusterrolebinding.rbac.authorization.k8s.io/default-view created

...
...

~/work/k8s-handson via 🐹 v1.14.4 took 8s 
❯ kubectl run --rm -i demo --image=in-cluster:v0.1
If you don't see a command prompt, try pressing enter.
There are 9 pods in the cluster
There are 9 pods in the cluster
There are 9 pods in the cluster
There are 9 pods in the cluster
...
...