client-go 实战之一:准备工作
[](()重要前提
开始 client-go 实战之前要对以下知识点有所了解:
kubernetes 基本原理和操作;
kubernetes 的 Group、Version、Resource 等概念,推荐阅读[《Kubernetes 的 Group、Version、Resource 学习小记》](()
[](()本篇概览
作为整个系列的开篇,除了对 client-go 做介绍,还要为后面的实战做好如下准备工作:
列出要用到的硬件;
列出要用到的软件及其版本;
同步 kubernetes 配置文件,使得开发环境可以远程访问 kubernetes 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 ;
[](()环境信息
如下图所示,本次实战一共用到两台电脑:
![](https://static001.geekbang.org/infoq/b6/b66cce58a5e4da9265cfab8e4f92b437.png)
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:
![](https://static001.geekbang.org/infoq/0e/0e14bf7cca517eaf189c242cb5746e45.png)
+
表示有的新特性是 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 又实现了三种新的客户端对象;
评论