通过 go module 引入`cleint-go`的正确姿势

kubernetes client-go包使用示例 前言本文将归档到kubernetes-handbook的【开发指南—client-go示例】章节中,最终版本以kubernetes-handbook中为准。本文中的代码见:https://github.com/rootsongjc/kubernetes-client-go-sample 阅读详情
1. 问题

在项目上我喜欢通过go module做包管理,在使用的过程中会遇到各种导入包但因为版本问题无法正常使用的问题,这次遇到的问题如下:

项目中引用了client-go包,执行完 go mod tidy 及 go mod vendor 后,运行程序发现程序无法运行,报错如下: cannot load k8s.io/api/auditregistration/v1alpha1…

2. 刨根问底

第一时间检查vendor目录下报错信息中的库是否存在,发现真的不存在,于是查看go.mod文件:

require (
	github.com/imdario/mergo v0.3.12 // indirect
	golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect
	google.golang.org/appengine v1.6.7 // indirect
	k8s.io/api v0.21.0 // indirect
	k8s.io/apimachinery v0.21.0
	k8s.io/client-go v11.0.0+incompatible
	k8s.io/klog v1.0.0 // indirect
	k8s.io/utils v0.0.0-20210305010621-2afb4311ab10 // indirect
)

查看 cleint-go v11.0.0 版本的源码,发现这个版本并没有使用 go module 做版本管理,在README文档中说了下面的一句话:

We currently recommend using the v10.0.0 tag. See INSTALL.md for detailed installation instructions. go get k8s.io/client-go/... works, but will build master, which doesn’t handle the dependencies well.

意思大概就是说这个版本不能很好的处理依赖项,建议使用 v10.0.0 版本,找到了产生上面报错的根本原因了:go module 下载的依赖库与 client-go 不匹配导致,程序无法正常运行。

3. 解决问题

那就找一个稳定版本,然后手动修改 go.mod 文件,举例如下:

replace (
	k8s.io/api => k8s.io/api v0.15.10
	k8s.io/apimachinery => k8s.io/apimachinery v0.15.10
	k8s.io/client-go => k8s.io/client-go v0.15.10
)

当然你也可以根据自己的需要选择满足自己需求的版本,只需要更换示例中的版本号就可以了。

4. 总结

在博客中我省略了谷歌的过程,因为在搜索的过程中,我看到了很多博客直接给出了修改 go.mod 来解决这个问题的办法,但是我想知道为什么那么做,经过反向探索,一步步找出了产生问题的根本原因及解决办法,这里总结一下就是:go module 做版本管理如果报找不到依赖之类的问题,排除网络问题后可以直接去源码找问题,源码的 README 文档中一般都能找到解决思路。

Golang net/http包 client浅尝(一) tcp链接client 包 一次完整请求client使用发起流程DosendRoundTrip client 包 一次完整请求 client使用 http.Client{ Transport: &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, //连接超时时间 ... 阅读详情

相关推荐

FPGA开发者必看:Xilinx PCIe IP核BAR地址配置避坑指南(附实例解析)

本文为FPGA开发者提供了Xilinx PCIe IP核中BAR地址配置的详细避坑指南。文章深入解析了32位与64位地址空间的选择逻辑、Pcie to AXI Translation参数的核心作用,并通过实例说明如何正确配置以避免地址映射错乱和数据访问失败。重点探讨了BAR空间类型、大小设定以及地址转换机制,帮助开发者构建清晰可靠的PCIe系统,是调试与优化PCIe设计的关键参考。

weixin_29252171的博客 424

client-go入门

client-go入门教程

Jacson__的博客 2178

Windows上python的spark环境搭建

1.安装好JDK 下载并安装好jdk-12.0.1_windows-x64_bin.exe,配置环境变量: 新建系统变量JAVA_HOME,值为Java安装路径 新建系统变量CLASSPATH,值为 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(注意最前面的圆点) 配置系统变量PATH,添加 %JAVA_HOME%bin;%JAVA_HOME%jrebin 在CMD中输入:java或者java -version,不显示不是内部命令等,说明安装成功。

weixin_43915303的博客 651

解决Go报错:parsing go.mod :module declares its path as: ××× but was required as: ×××

解决Go报错:parsing go.mod :module declares its path as: ××× but was required as: ×××

qq_30974755的博客 8922

基于激光雷达的目标跟随功能移植到自己的ROS机器人小车上

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载目标跟随的源码二、修改话题名称1.修改/cmd_vel话题名称2.修改/scan话题名称3.修改双电机正反转4.目标跟随功能测试 前言 本人尝试把github上的一个目标跟随项目移植到自己的机器人小车上,并且成功了,最终小车可以跟着人移动,在这里分享一下心得。基于激光雷达的目标跟随,通过获取激光雷达的信息,跟随最近的物体。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载目标跟随的源码 源码地址:https:

weixin_44574633的博客 4461

拆解爆火AI图文日报!用扣子(Coze)工作流,10分钟实现自动化新闻早报

当用户提供一则新闻内容时,仔细分析新闻中的关键信息。提取新闻事件的核心要点,包括事件主体、发生时间、地点、主要情节等。用简洁的语言对新闻进行总结,控制在[X]字以内(可根据实际需求设定字数限制)。若用户提供多条新闻,对比各新闻之间的异同点。从事件类型、影响范围、发展趋势等方面进行分析。综合总结多条新闻的整体情况,以有条理的方式呈现给用户。

一身都是月 2425

Kubernetes CRD 系列(三):Client-Go 的使用

概述 在上一篇GVK 和 GVR中,我演示了如何通过 HTTP API 来访问操作 Kubernetes 的资源,如果我们愿意,完全可以用代码来做这些操作,从而将 Kubernetes CRD 的操作集成进我们的项目中。但是,事实上,这种工作繁琐且复杂,所以,不妨先看看是否有现成的工具可以利用。 在 Go 编程语言中,官方钦定了两个 Library,分别是Client-Go和Api Machinery,其中 Client-Go 可以用来 CRUD Kubernetes 的资源,而 Api Ma...

会哭的雨@的博客 3272

9、自动定理证明的发展历程与关键技术

本文全面介绍了自动定理证明的发展历程、关键技术及其实际应用,包括消解原理、参数化、支撑集策略等核心方法,并探讨了算法优化、数据结构优化及并行计算等提升效率的手段。同时,文章展望了未来发展方向,如深度学习在定理证明中的应用、交互式定理证明以及高阶逻辑的研究前景。

ll5678的博客 505

client-go使用方法

下载k8s对应版本的client-go依赖版本,本机安装的是19.16。client-go代码在集群内部使用。使用dockerfile生成镜像。创建目录并初始化项目。

ltgsoldier1的博客 939

C# 量子级跨平台开发:用Uno Platform实现Windows、iOS、Android的“量子纠缠”UI同步

墨瑾轩推出编程学习平台,通过XAML的“量子纠缠”技术,实现跨平台开发的高效与一致性。传统方案中,多平台代码重复率高,UI差异大,而量子级方案则通过一套代码构建全平台应用,UI原子化同步,开发效率提升5倍。Uno Platform的“量子纠缠”架构解决了代码碎片化、性能瓶颈和调试难题,实现UI原子化同步、性能提升300%和跨平台数据无缝同步。核心架构包括XAML的跨平台渲染、MVVM的量子叠加态架构、平台差异的量子退相干处理以及性能优化的量子隧穿效应,为开发者提供高效、一致的跨平台开发体验。

java专栏 1165

【openwrt-21.02】T750 openwrt 双系统说明及切换方法

高度集成的 T750 平台大幅减少组件数量,为产品设计者提供更小的尺寸和更低的功耗。T750 采用先进的 7nm 制程,高度集成 5G 调制解调器和四核 Arm CPU,提供较强的功能和配置,设备制造商得以打造精巧的高性能 CPE 产品,如固定无线接入(FWA)路由器和移动热点。3. preloader 加载并启动 A 系统,若 A 系统的任一启动阶段加载失败,preloader 将重新加载并启动 A 系统 3 次,若 3 次均失败,则自动切换至 B 系统,加载并启动 B 系统。A/B 系统切换流程如下。

wgl307293845的博客 1414

golang的net/http包Client的使用

文章目录1. 从一个极简示例开始2. 语法2.1 初始化客户端 1. 从一个极简示例开始 func HiHttp(){ resp, err := http.Get("http://gitlabcto.xxx.com.cn/api/v4/projects") if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) //body是一个二进制组,用stri

架构+开发+运维 4798

【腾讯小龙虾 WorkBuddy 专栏 03】技能(Skills)制作全教程!自定义技能编写、导出分享、导入使用一步到位

🔥腾讯AI智能体WorkBuddy自定义技能全攻略 本文为零基础用户提供WorkBuddy自定义技能的完整教程,涵盖技能概念、编写规范到实操全流程。核心内容包括: 技能本质:标准化任务指令模板,可固化重复操作流程 三大价值:一键执行重复任务/跨设备共享/降低使用门槛 实操演示:以"桌面文档自动分类"为例,分步讲解编写、测试、导出 共享方案:支持单技能/批量导出,通过任意渠道传输分享 导入指南:3秒完成他人技能加载,并提供常见问题解决方案 高阶优化:增加异常处理、版本管理等提升技能普适性

AI人人懂 2953

k8s client-go 之 依赖问题解决

k8s client-go依赖问题解决 记一次go mod依赖版本不一致的解决过程 克隆下client-go的工程,并checkout对应kubernetes版本上,可以直接使用example中的例子,但是在自定义开发时遇到了接口不一致问题,很明显这是依赖版本问题所致。 我们使用client-go/examples/create-update-delete-deployment的例子测试 测试环境...

longtails的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

client-go使用实例

主要是利用client-go对service,deployment,ingress等资源进行create,delete,update,list,watch操作。 https://github.com/cliterb/kube-client 转载于:https://www.cnblogs.com/cliterb-gao/p/9889558.html...

weixin_33859665的博客 1338

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

client-go的使用及源码分析

本文个人博客地址:http://www.huweihuang.com/article/source-analysis/client-go-source-analysis/ 1. client-go简介 1.1 client-go说明 ​ client-go是一个调用kubernetes集群资源对象API的客户端,即通过client-go实现对kubernetes集群中资源对象(包

胡伟煌的博客 2万+

go http包学习

go http包学习 go root下的~/goroot/pkg/.a文件和 ~/goroot/src/*.go文件的区别 net/http/client.go net/http/cookie.go 由于包下面的文件比较多这样写下来文档比较大,所以后面一个go文件写一篇笔记,写文档的目的是督促自己完成看一遍源码库的目标!1.go root下的~/goroot/pkg/.a文件和 ~/goroot/s

feiger的专栏 6681

golang import module出现 module ******* @latest found(v1.6.4), but does not contain package ******问题解决

这种情况下一般是因为版本号不对的问题导致,比如上面报错goconvey版本不对,可以在go.mod文件中将require goconvey的部分删除掉,然后再重新更新go mod tidy试一下

xiangy0809的博客 1万+

使用client-go包访问Kubernetes CRD

Kubernetes API服务器可通过自定义资源定义轻松扩展。但是,用client-go库访问这些资源有点麻烦,官方也没有完整的文档。如kubebuilder operator-framework都能很方便的帮助我们去创建实现一个controller,但是封装的过于好导致我们并不清楚内部是怎么调用client-go的,很多场景我们是需要自己去调用接口操作CRD的而不是在controller中去访...

github_35614077的博客 3788

浅析kubernetes client-go structure

Prepare Introduction 从2016年8月起,Kubernetes官方提取了与Kubernetes相关的核心源代码,形成了一个独立的项目,即client-go,作为官方提供的go客户端。Kubernetes的部分代码也是基于这个项目的。 client-go 是kubernetes中广义的客户端基础库,在Kubernetes各个组件中或多或少都有使用其功能。。也就是说,client-go可以在kubernetes集群中添加、删除和查询资源对象(包括deployment、service、pod、

期待幸福 1235

使用client-go实现自定义控制器

介绍 我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点: NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。 LoadBalancer的缺点是每个Service都需要一个LB,浪费,麻烦,并且需要Kubernetes之外的设备的支持。 基于这种现状,Kubernetes提供了Ingress资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露

QIWEIscrm的博客 731

栈与队列以及代码实现

栈与队列   定义   栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。   由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。     队列(queue)是只

Yulu_Gan的博客 485

golang 使用client-go编辑Kubernetes configmap数组

项目需求: 项目中用到需要使用client-go来读取并修改,删除k8s里configmap的内容,本文用来记录一下具体的使用及代码实例 1.configmap格式 本例子所用到的configmap是一个map类型的数组,里面存储着每一块创建的硬盘的信息,具体格式如下: apiVersion: v1 data: config.json: '{"testpvs":[{"volumeid":"314f39fb-9dab-42fb-b755-7f0c5aab449e","status":"Delete","p

leadersnowy的专栏 4265

使用client-go 进行k8s相关操作-clientset(一)

package main import ( "flag" "fmt" "k8s.io/client-go/1.4/kubernetes" "k8s.io/client-go/1.4/pkg/api" "k8s.io/client-go/1.4/pkg/api/unversioned" "k8s.io/client-go/1.4/pkg/api/v1" "k8s.io/cli

yevvzi的博客 1万+

Golang (2) client-go

下载client-go到本地 go mod init goPrj go get k8s.io/client-go@master go mod download # 把package下载至$GOPATH/mod 编译例子 link In Cygwin, $ GOOS=linux go build -o ./app 在minikube里面构建docker image # 先通过...

SpanningWings的博客 338

Golang包管理工具(一)go mod

在项目上,经常需要使用外部的包来实现相应的功能,当多个人同时进行开发时,就需要一个包管理器,每个人通过包管理器将自己代码所调用包,保存在同一个目录地下,然后提交到git上面,当以通进行开发的人拉取代码后,就不需要担心本地没有你的依赖包的问题,从而确保项目开发正常进行,下面介绍golang1.11版本后的go mod使用方法。 【1】与go mod相关的环境变量 GO111MODULE环境变...

random_w的博客 1849
上一篇: epel-release的作用解密
random_w
博客等级 码龄9年 130粉丝 168原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值