【学习client-go源码,了解管理kubernetes集群的奥秘】—— 连接集群

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

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

一、获取源码

1、第一种,在github上面获取如图,直接搜索client-go就可以找到,然后将源码clone到本地就可以了。

在Github中下载client-go

2、第二种执行下面的命令即可。
go  get  k8s.io/client-go

二、探秘

管理k8s的第一步先要连接集群,因此我们先找到client-go源码的入口。 在Github官网上,我们可以找到官方给的example程序。

1、在README中我们可以看到目录中有一个How to use it,点击链接。

How to use it

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

example
点击后可以看到下面的界面,里面有一个main.go,这就是我们要找到的入口了。
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{
   
   })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值