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 mainimport ("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来列出特定命名空间里的所有podpods, 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