client-go实战之一:准备工作
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
系列文章链接
- client-go实战之一:准备工作
- client-go实战之二:RESTClient
- client-go实战之三:Clientset
- client-go实战之四:dynamicClient
- client-go实战之五:DiscoveryClient
关于client-go
- client-go是kubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作;
- 除了提供丰富的API用于操作kubernetes资源,client-go还为controller和operator提供了重要支持,如下图,client-go的informer机制可以将controller关注的资源变化及时带给此controller,使controller能够及时响应变化:

关于《client-go实战》系列
《client-go实战》系列是欣宸推出的实战主题原创,旨在与大家一起动手体验client-go的相关技术,从简单的实践开始,逐步深入了解client-go的强大功能,为后续的operator学习打下扎实的基础;
重要前提
- 开始client-go实战之前要对以下知识点有所了解:
- kubernetes基本原理和操作;
- kubernetes的Group、Version、Resource等概念,推荐阅读《Kubernetes的Group、Version、Resource学习小记》
本篇概览
作为整个系列的开篇,除了对client-go做介绍,还要为后面的实战做好如下准备工作:
- 列出要用到的硬件;
- 列出要用到的软件及其版本;
- 同步kubernetes配置文件,使得开发环境可以远程访问kubernetes;
环境信息
- 如下图所示,本次实战一共用到两台电脑:

- Linux电脑:操作系统是CentOS 7.9,已安装1.20.0版本的kubernetes
- MacBook Pro:操作系统是macOS Big Sur(11.1),编码工作在此电脑上进行
- MacBook Pro上安装的go版本为1.15.7
- 您可以按照个人习惯选择IDE,我这里用的是GoLand-2020.2版本
确定要用的client-go版本
client-go官方提供了多个版本,并且给出了和kubernetes版本的匹配列表,如下所示:
| Kubernetes 1.15 | Kubernetes 1.16 | Kubernetes 1.17 | Kubernetes 1.18 | Kubernetes 1.19 | Kubernetes 1.20 | |
|---|---|---|---|---|---|---|
kubernetes-1.15.0 |
✓ | +- | +- | +- | +- | +- |
kubernetes-1.16.0 |
+- | ✓ | +- | +- | +- | +- |
kubernetes-1.17.0/v0.17.0 |
+- | +- | ✓ | +- | +- | +- |
kubernetes-1.18.0/v0.18.0 |
+- | +- | +- | ✓ | +- | +- |
kubernetes-1.19.0/v0.19.0 |
+- | +- | +- | +- | ✓ | +- |
kubernetes-1.20.0/v0.20.0 |
+- | +- | +- | +- | +- | ✓ |
HEAD |
+- | +- | +- | +- | +- | +- |
这里解释一下表格中的✓ 、+ 、- 的含义:
✓表示精确匹配,如下图红框,表示v0.20.0版本可以精确匹配1.20.0版本的kubernetes:

+表示有的新特性是client-go支持的,但是此kubernetes版本却不支持;-表示有的新特性是kubernetes支持的,但是此client-go版本却不支持;
- 我这里kubernetes版本为1.20.0,因此选用client-go的0.20.0版本最合适;
复制k8s环境的配置文件
- 为了能让MacBook Pro电脑上的go应用顺利访问K8S,请将K8S环境下的~/.kube/config文件复制到MacBook Pro电脑的~/.kube/目录下;
客户端对象简述
- 本篇聚焦准备工作,不做编码,这里提前介绍一下后面的实战内容:通过client-go提供的客户端对象与kubernetes的API Server进行交互,而client-go提供了以下四种客户端对象,后面的实战会逐个体验:
- RESTClient:这是最基础的客户端对象,仅对HTTPRequest进行了封装,实现RESTFul风格API,这个对象的使用并不方便,因为很多参数都要使用者来设置,于是client-go基于RESTClient又实现了三种新的客户端对象;
- ClientSet:把Resource和Version也封装成方法了,用起来更简单直接,一个资源是一个客户端,多个资源就对应了多个客户端,所以ClientSet就是多个客户端的集合了,这样就好理解了,不过ClientSet只能访问内置资源,访问不了自定义资源;
- DynamicClient:可以访问内置资源和自定义资源,个人感觉有点像java的集合操作,拿出的内容是Object类型,按实际情况自己去做强制转换,当然了也会有强转失败的风险;
- DiscoveryClient:用于发现kubernetes的API Server支持的Group、Version、Resources等信息;
- 至此,咱们的环境和知识准备工作就完成了,接下来一同去探索强大的client-go吧!
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
client-go实战之一:准备工作的更多相关文章
- Flink SQL Client综合实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之一:用proto生成代码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- DL4J实战之一:准备
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- SpringCloud 进阶之分布式配置中心(SpringCloud Config)
1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...
- Windows下搭建HTTP/HTTPS服务器及测试过程
1 安装Apache http://www.apachehaus.com/cgi-bin/download.plx 选择合适的版本下载 本次下载的是 Apache 2.4.x VC14 Apache版 ...
- 对弈win32笔记
对弈的win32笔记 一:Windows程序运行原理 一.Windows四大模块程序 1.1控制台程序 没有自己的窗口,dos-显示或者运行程序,入口mian() 1.2窗口程序 有自己的窗口,w ...
- spark学习(基础篇)--(第三节)Spark几种运行模式
spark应用执行机制分析 前段时间一直在编写指标代码,一直采用的是--deploy-mode client方式开发测试,因此执行没遇到什么问题,但是放到生产上采用--master yarn-clus ...
- Spark各个组件的概念,Driver进程
spark应用涉及的一些基本概念: 1.mater:主要是控制.管理和监督整个spark集群 2.client:客户端,将用应用程序提交,记录着要业务运行逻辑和master通讯. 3.sparkCon ...
- elementUI——主题定制
需求: 设计三套主题色+部分图标更换: 实现方式汇总: 1.传统做法,生成多套css主题包,切换link引入路径切换href实现,参考网站:http://jui.org/: <link id=& ...
- 大前端时代搞定PC/Mac端开发,我有绝招
如果你是一位前端开发工程师,对"跨平台"一词应该不会感到陌生.像常见的前端框架:比如React.Vue.Angular,它们可以做网页端,也可以做移动端,但很少能做到跨PC.Mac ...
随机推荐
- mysql采坑笔记
mysqld --initialize-insecure // 初始化数据 mysql -u root -p // 登录 navicat for mysql 1251错误解决方法 ALTER USER ...
- 预训练语言模型的前世今生 - 从Word Embedding到BERT
预训练语言模型的前世今生 - 从Word Embedding到BERT 本篇文章共 24619 个词,一个字一个字手码的不容易,转载请标明出处:预训练语言模型的前世今生 - 从Word Embeddi ...
- DVWA靶场练习-Command Injection命令注入
Command Injection 原理 攻击者通过构造恶意参数,破坏命令的语句结构,从而达到执行恶意命令的目的.
- 迈入 8K 时代,AI 驱动超高清 “视” 界到来
2021 年,超高清迈入 "8K" 时代.超高清视频将带来全新视听体验,但超高清生产在内容生产层面也面临着超高清存量少.生产设备更新换代慢.制作周期成倍增加的困境.在 7 月 10 ...
- maze writeup
maze writeup 攻防世界的一道迷宫题,第一次接触这样的题,个人感觉很有意思,收获也挺多,做一篇笔记记录一下. 程序分析 __int64 sub_4006B0() { signed __int ...
- Netty:简单使用
Netty是什么东西 Netty是一个封装很好的异步事件驱动框架,让我们快速的部署服务端和客户端的网络应用,进行异步IO通信. 1.什么是IO通信IO就是input 和 output,是一种在两台主机 ...
- Distribute SSH Pubkey to Multiple Hosts with Fabric
Generate ssh keys on source host with ssh-keygen; Disable known_hosts prompt(optional): add "St ...
- Kurento实战之四:应用开发指南
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【现学现卖】th:href标签动态路径设置,thymeleaf获取session中的属性值
update:2020-02-28:按道理来说这个功能在前后端分离的时候应该不怎么用的上,基本到现在我还是没遇到过有这样的需求,不过也是一种方法就是.th:href="@{/{role}/l ...
- [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...