1. 前言
client-go 是官方提供的 go 语言客户端库,可以跟 K8S API Server 进行交互。如果开发者想对 K8S 进行二次开发,可直接拿来使用,不必重复造轮子。
client-go 已集成进 K8S 源码,所以 K8S 组件之间也采用 client-go 进行通信(例如 kubectl 操作 API Server)。client-go 在 K8S 源码中存放的路径是 vendor/k8s.io/client-go,如下图所示:
本系列文章会全方面介绍 client-go,包括快速上手、架构设计和源码剖析,在源码剖析章节会重点介绍 Informer 机制(此机制是 K8S 组件之间相互通信的基石)。
如果想真正学好 K8S,仅仅会操作是远远不够地,只有真实地触摸到代码底层,并实际了解其内部数据结构和运行机制,才能有“不畏浮云遮望眼,自缘身在最高层”的体悟。
2. 前提
本系列文章并不要求读者一定具备 go 语言背景,考虑到大多数人的认知习惯,所以笔者采用了一种先易后难、循序渐进、层层铺垫的编写方式,当然如果碰上喜欢挑战、勤于练胆、不撞南墙就浑身不舒坦的读者,本教程依旧适合,您只需要从后往前读即可。
尽管本系列文章对读者的水平做到了最大程度的宽容,但如果想真切感受到程序运行带来的快感,建议还是配置 go sdk、go 项目开发环境和 K8S 运行环境。正所谓“九层之台,起于累土;千里之行,始于足下”,个人认为老子的话还是要听一听的。
3. 运行环境
本系列所采用的环境信息如下(不要求读者完全匹配,可根据实际情况酌情处理,但建议 go sdk 版本不要过低):
- K8S 版本 : 1.19.0
- Docker 版本:20.10.8
- CentOS 版本:7.7.1908
- GO SDK 版本:go1.16.6 linux/amd64
4. GO SDK安装
安装步骤如下,如果读者已经安装过,可直接跳到下一章节继续阅读:
- 下载和解压缩
- 设置环境变量
- 验证是否安装成功
- 配置包下载代理(可选但推荐)
4.1 下载和解压缩
在命令行执行如下指令下载和解压缩 GO SDK:
# cd /opt
# yum install -y wget
# wget https://golang.google.cn/dl/go1.16.6.linux-amd64.tar.gz
# tar -zxvf go1.16.6.linux-amd64.tar.gz -C /usr/local
4.2 设置环境变量
编辑 /etc/profile 文件,在文件末尾添加下面内容
export GO111MODULE=on
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
编辑保存后,在命令行执行如下语句使上面的配置生效:
# source /etc/profile
4.3 验证是否安装成功
安装完毕并设置好环境变量后,在命令行执行如下命令:
# go version
go version go1.16.6 linux/amd64
如果能正确显示 GO SDK 的版本(如上所示),则说明 SDK 安装成功。
4.4 配置下载代理(可选但推荐)
首先声明该步骤是可选的,但笔者强烈建议执行此步骤,因为在后面开发中会下载很多依赖包,如果采用默认代理,要么可能下载不到(具体原因,你懂的),要么下载速度巨慢,所以建议在命令行执行下面命令修改:
## GOPROXY="https://proxy.golang.org,direct"
# go env GOPROXY
# go env -w GOPROXY="https://goproxy.io,direct"
# go env GOPROXY
https://goproxy.io,direct
如果命令执行结果如上所示,表示修改成功,新代理路径已经改成 goproxy.io。
自此,整个 GO SDK 设置结束,读者可以进入到后续 GO 开发了。