client-go 系列之一《go sdk 配置》

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 开发了。

5 参考文献

client-go 仓库 github.com/kubernetes/…