(横道・疑問)は気になって調べて概要は分かったものの詳細はよくわからんかったやつ
repository
k8s-staging
のタグ付けがされていて, kubernetes/kubernetes/staging/src/k8s.io/client-go と同期されてる
kubernetes
- Kubernetes API 通信クライアントdiscovery
- Kubernetes API でサポートする API を検出するdynamic
- Kubernetes API オブジェクトに対して一般的な操作を動的に行うplugin/pkg/client/auth
- 認証プラグインtransport
- 認証を設定して接続を開始するtools/cache
- コントローラー作成に役立つ何か?(後述のサンプルからするとクライアント作成に役立つツールっぽい)go get [k8s.io/client-go@v0.17.0](<http://k8s.io/client-go@v0.17.0>)
公式から最初に飛ばされるのは, in-cluster exsample と out-of-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
...
...