首页后端开发GO外包精通--golang之k8s开发(一)

外包精通--golang之k8s开发(一)

时间2023-10-27 19:21:03发布访客分类GO浏览1080
导读:初始化项目go mod init <项目名>PS D:\Code\27ops-platform> go mod init 27ops-platform go: creating new go.mod: module 27o...

初始化项目

go mod init 项目名>

PS D:\Code\27ops-platform>
     go mod init 27ops-platform
go: creating new go.mod: module 27ops-platform
go: to add module requirements and sums:
        go mod tidy
PS D:\Code\27ops-platform>
    

配置版本

Tip

在项目的go.mod文件指定版本

require (
	k8s.io/client-go v0.20.10
)

下依赖包

Tip:

go get modues> 下载的是最新版本

PS D:\Code\27ops-platform>
     go mod tidy
go: downloading k8s.io/client-go v0.20.10
go: downloading github.com/spf13/pflag v1.0.5
go: downloading golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0
go: downloading k8s.io/klog/v2 v2.4.0
go: downloading k8s.io/apimachinery v0.20.10
go: downloading github.com/imdario/mergo v0.3.5
go: downloading sigs.k8s.io/yaml v1.2.0
go: downloading golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
go: downloading github.com/google/go-cmp v0.5.2
go: downloading k8s.io/api v0.20.10
go: downloading github.com/stretchr/testify v1.6.1
go: downloading github.com/google/gofuzz v1.1.0
go: downloading github.com/go-logr/logr v0.2.0
go: downloading gopkg.in/yaml.v2 v2.2.8
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
go: downloading golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
go: downloading k8s.io/utils v0.0.0-20201110183641-67b214c5f920
go: downloading github.com/gogo/protobuf v1.3.2
go: downloading sigs.k8s.io/structured-merge-diff/v4 v4.1.2
go: downloading github.com/json-iterator/go v1.1.10
go: downloading github.com/modern-go/reflect2 v1.0.1
go: downloading github.com/pmezard/go-difflib v1.0.0
go: downloading gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
go: downloading golang.org/x/sys v0.0.0-20201112073958-5cba982894dd
go: downloading gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15
go: downloading gopkg.in/inf.v0 v0.9.1
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading golang.org/x/text v0.3.4
go: downloading github.com/kr/pretty v0.2.0
go: downloading google.golang.org/appengine v1.6.5
go: downloading github.com/kr/text v0.1.0
go: downloading github.com/golang/protobuf v1.4.3
go: downloading google.golang.org/protobuf v1.25.0
go: downloading golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
PS D:\Code\goproject\27ops-platform>
 

client-go

常用方法

//获取pod列表
podList, err := K8s.ClientSet.CoreV1().Pods(namespace).List(context.TODO(),
metav1.ListOptions{
}
)

//获取pod详情
pod, err = K8s.ClientSet.CoreV1().Pods(namespace).Get(context.TODO(), podName,
metav1.GetOptions{
}
)

//删除pod
err = K8s.ClientSet.CoreV1().Pods(namespace).Delete(context.TODO(), podName,
metav1.DeleteOptions{
}
)

//更新pod(完整yaml)
pod, err = K8s.ClientSet.CoreV1().Pods(namespace).Update(context.TODO(), pod,
metav1.UpdateOptions{
}
)

//获取deployment副本数
scale, err := K8s.ClientSet.AppsV1().Deployments(namespace).GetScale(context.TODO(),
deploymentName, metav1.GetOptions{
}
)

//创建deployment
deployment, err =
K8s.ClientSet.AppsV1().Deployments(data.Namespace).Create(context.TODO(), deployment,
metav1.CreateOptions{
}
)

//更新deployment(部分yaml)
deployment, err = K8s.ClientSet.AppsV1().Deployments(namespace).Patch(context.TODO(),
deploymentName, "application/strategic-merge-patch+json", patchByte,
metav1.PatchOptions{
}
    )

创建main.go

Tip:

Cannot use 'err' (type error) as the type any。工具版本bug,更新版本可修复。

img src="https://note.27ops.com/img/go/client-go.png" style="zoom:67%; " />

package main

import (
	"context"
	"fmt"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
)

func main() {

	// 将kubeconfig文件转换成rest.config类型对象
	// 从/root/.kube/config复制k8s集群配置到windows上
	// 注意windows是两个"\"
	conf, err := clientcmd.BuildConfigFromFlags("", "D:\\Code\\goproject\\27ops-platform\\config")
	if err != nil {

		panic(err)
	}

	// 根据rest.config类型的对象,new一个clientset
	clientset, err := kubernetes.NewForConfig(conf)
	if err != nil {

		panic(err)
	}

	// 使用clientset获取podList列表
	podList, err := clientset.CoreV1().Pods("kube-system").List(context.TODO(), metav1.ListOptions{
}
)
	if err != nil {

		panic(err)
	}

	//
	for _, pod := range podList.Items {

		fmt.Println(pod.Name, pod.Namespace)
		//fmt.Println(pod)
	}

}
    

运行main.go

img src="https://note.27ops.com/img/go/client-run.png" style="zoom:67%; " />

PS D:\Code\goproject\27ops-platform>
     go run main.go
coredns-558bd4d5db-qv2w6 kube-system
coredns-558bd4d5db-vcdrk kube-system
etcd-master kube-system
kube-apiserver-master kube-system
kube-controller-manager-master kube-system
kube-flannel-ds-77wrw kube-system
kube-flannel-ds-l2hd8 kube-system
kube-flannel-ds-wwptq kube-system
kube-proxy-jzvg5 kube-system
kube-proxy-lcwm9 kube-system
kube-proxy-qs4kq kube-system
kube-scheduler-master kube-system
PS D:\Code\goproject\27ops-platform>
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 外包精通--golang之k8s开发(一)
本文地址: https://pptw.com/jishu/513479.html
Golang 开发外包熟练教程(从零开始学GO) Docker学习路线10:容器安全

游客 回复需填写必要信息