Ch01 Client
Yang Haoran 7/19/2023 K8s operatorGo
# RestClient

k8s中所有的资源在go中都实现了runtime.object

package main
import (
"context"
v1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
//config, 用来连接k8s
//master url指定为空的话,会从kubeconfig里获取
config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\YHR\\.kube\\config")
if err != nil {
panic(err)
}
config.GroupVersion = &v1.SchemeGroupVersion
config.NegotiatedSerializer = scheme.Codecs
config.APIPath = "/api"
//client
restClient, err := rest.RESTClientFor(config)
if err != nil {
panic(err)
}
//get data
//拼接http请求的url,获取集群里的pod
pod := v1.Pod{}
err = restClient.Get().Namespace("kubernetes-dashboard").Resource("pods").Name("dashboard-metrics-scraper-6ccbc78cd8-5xx8f").Do(context.TODO()).Into(&pod)
if err != nil {
println(err)
} else {
println(pod.Name)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# ClientSet

go mod tidy
1
//client Set
config, err := clientcmd.BuildConfigFromFlags("", "C:\\Users\\YHR\\.kube\\config")
if err != nil {
panic(err)
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err)
}
coreV1 := clientset.CoreV1()
pod, err := coreV1.Pods("kubernetes-dashboard").Get(context.TODO(), "dashboard-metrics-scraper-6ccbc78cd8-5xx8f", v1.GetOptions{})
if err != nil {
println(err)
} else {
println(pod.Name)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Other Client


# Reflecter

可以通过kubectl proxy来在外部访问k8s内的API
列出所有的pod

监听pod事件



# Store
delta FIFO
- clientgo的存储类型

- etcd中key是pod的名字,value是对应的yaml文件


