client-go使用方法

2023-12-27 00:29:33

client-go代码在集群内部使用
创建目录并初始化项目

#创建目录
mkdir client-go-examples
cd client-go-examples
#初始化项目
go mod init incluster
mkdir incluster
cd incluster
#创建文件
touch main.go

main.go内容

//client-go链接apiSeriver
//获取依赖
//go get k8s.io/client-go@v0.19.16
//go get k8s.io/apimachinery@v0.19.16
package main

import (
	"context"
	"log"
	"time"

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

func main() {
	//初始化config InClusterConfig函数取得认证所需的token和ca.crt文件
	config, err := rest.InClusterConfig()
	if err != nil {
		log.Fatal(err)
	}
	//通过client初始化clientset 通过clientset可以实现各种资源的CRUD操作
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatal(err)
	}

	for {
		//通过clientset来列出特定命名空间里的所有pod
		pods, err := clientset.CoreV1().Pods("default").List(context.TODO(), metav1.ListOptions{})
		if err != nil {
			log.Fatal(err)
		}
		log.Printf("There are %d pods in the cluster\n", len(pods.Items))
		for i, pod := range pods.Items {
			log.Printf("%d -> %s/%s", i+1, pod.Namespace, pod.Name)
		}
		<-time.Tick(5 * time.Second)
	}
}

下载k8s对应版本的client-go依赖版本,本机安装的是19.16

#获取依赖
go get k8s.io/client-go@v0.19.16
go get k8s.io/apimachinery@v0.19.16
#更新依赖
go mod tidy

使用dockerfile生成镜像

#构建
go build -o app ./main.go
#dockerfile内容
FROM busybox
COPY ./app /app
ENTRYPOINT /app
#dockerfile生成镜像
docker build -t in-cluster:v1 .
#因为是集群环境 需要把镜像推送到本地私有仓库,一遍其他node节点获取镜像
docker tag in-cluster:v1 192.168.140.135:5000/in-cluster:v1
docker push 192.168.140.135:5000/in-cluster
#创建ClusterRoleBinding,为了能列出所有pod需要给default Service Account View权限
kubectl create clusterrolebinding default-view --clusterrole=view --serviceaccount=default:default
#启动pod测试
kubectl run -i in-cluster --image=192.168.140.135:5000/in-cluster:v1

文章来源:https://blog.csdn.net/ltgsoldier1/article/details/135232816
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。