前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >外包精通--golang之k8s开发(一)

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

原创
作者头像
Godev
修改2023-07-28 02:34:07
6960
修改2023-07-28 02:34:07
举报
文章被收录于专栏:Godev

初始化项目

go mod init <项目名>

代码语言:txt
复制
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文件指定版本

代码语言:txt
复制
require (
	k8s.io/client-go v0.20.10
)

下依赖包

Tip:

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

代码语言:txt
复制
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

常用方法

代码语言:txt
复制
//获取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%;" />

代码语言:go
复制
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%;" />

代码语言:txt
复制
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>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初始化项目
  • 配置版本
  • 下依赖包
  • client-go
    • 常用方法
      • 创建main.go
        • 运行main.go
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档