学习源码最头疼的是找到入口开始学习,刚开始学习client-go源码的时候,感觉无从下手,后面参考了很多博客,慢慢摸索,从连接k8s集群开始,逐步展开,就可以轻松读懂client-go源码。当然,在学习源码的过程中,也要学习源码的编码风格,学习源码的编程思路,对自己的编程能力也有很大的提高,开始第一篇文章,找到client-go的入口,连接k8s集群。
一、获取源码
1、第一种,在github上面获取如图,直接搜索client-go就可以找到,然后将源码clone到本地就可以了。

2、第二种执行下面的命令即可。
go get k8s.io/client-go
二、探秘
管理k8s的第一步先要连接集群,因此我们先找到client-go源码的入口。 在Github官网上,我们可以找到官方给的example程序。
1、在README中我们可以看到目录中有一个How to use it,点击链接。

2、这里有两种选择,第一种是你的程序运行在一个pod中,另一种是你的程序运行在集群外,这里我选择第二种。

点击后可以看到下面的界面,里面有一个main.go,这就是我们要找到的入口了。

点击main.go就可以看到一个示例程序。
package main
import (
"context"
"flag"
"fmt"
"os"
"path/filepath"
"time"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
var kubeconfig *string
if home := homeDir(); home != "" {
kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
} else {
kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
}
flag.Parse()
// use the current context in kubeconfig
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
if err != nil {
panic(err.Error())
}
// create the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}
for {
pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{
})
if err != nil {
panic(err.Error())
}
fmt.Printf("There are %d pods in the cluster\n", len(pods.Items))
// Examples for error handling:
// - Use helper functions like e.g. errors.IsNotFound()
// - And/or cast to StatusError and use its properties like e.g. ErrStatus.Message
namespace := "default"
pod := "example-xxxxx"
_, err = clientset.CoreV1().Pods(namespace).Get(context.TODO(), pod, metav1.GetOptions{
})

本文详细解析了Kubernetes客户端库client-go的使用方法,从获取源码开始,介绍了如何通过config文件或masterURL连接集群,展示了核心示例代码,解释了如何管理和获取集群中的Pod信息。
最低0.47元/天 解锁文章
880

被折叠的 条评论
为什么被折叠?



