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