如何利用 Google 开源工具 Ko 在 kubernetes 上构建并部署 Go 应用

KoGoogle 开源的一款用于构建并部署 Go 应用的工具。

这是一款简单、快速的 Go 应用镜像构建器。并与 Kubernetes 集成,能够将应用快速部署到 Kubernetes 上。是云原生时代 Kubernetes 应用开发的一大利器。

特点:

  • 需要构建的 Go 应用对系统镜像无太多依赖(例如,无 cgo,无 OS 软件包依赖关系),最好是只有一个 go 二进制。

  • 构建镜像的过程不需要 Docker ,因此可以用在轻量化的 CI/CD 场景。

  • 支持 yaml 模板,可以直接用于部署 Kubernetes 应用。

如何使用

官方地址在这 https://github.com/google/koarrow-up-right

1. 安装 ko

此处安装的是 v0.8.2 版本的 linux x86 版本,可以根据需要自行选择版本下载

Release 地址: https://github.com/google/ko/releasesarrow-up-right

curl -L https://github.com/google/ko/releases/download/v0.8.2/ko_0.8.2_Linux_x86_64.tar.gz | tar xzf - ko
chmod +x ./ko
sudo mv ko /usr/local/bin

2. 镜像仓库的认证

Ko 依赖的是 Docker 的镜像仓库的认证( Docker config 文件),即 ~/.docker/config.json

如果镜像仓库没有登录过,需要先进行 Docker login 生成 对应的认证配置文件,比如我直接用的是 docker hub ,那么直接 docker login 即可。

3. 设置私有仓库的地址

Ko 通过 环境变量 KO_DOCKER_REPO 配置私有仓库的地址, 这决定了 Ko 会将编译好的镜像推到哪个仓库。

4. 镜像构建 Ko publish

首先代码一定要在本地的 Go path,可以下载示例代码 https://github.com/zhaojizhuang/http-helloworldarrow-up-right

Ko publish 构建镜像,执行命令 ko publish github.com/http-helloworld/cmd/helloworld (main函数所在的 GoPath 路径)。

也支持相对路径编译,如下

5. Ko resolve

创建文件deploy.yaml ,yaml 内容如下

然后执行 ko resolve -f deploy.yaml 结果如下,可以看到 ko://github.com/http-helloworld/cmd/helloworld 被替换成了 zhaojizhuang66/helloworld-cbcbba9849adcc25ce56a08dfd597648@sha256:21d352ec9f9079f8da4c91cfe2461df51a404c079f262390b19fff4cb2ce15a0

6. Ko apply

ko apply -f xxx.yaml 用法同 kubectl apply -f xxx.yaml ,不同的是,ko apply -f 相当于先执行 resolveko://xxx 替换成镜像地址,然后再执行 kubectl apply -f

7. 替换基础镜像

可以通过 koconfig 文件中的 defaultBaseImage 变量来设置基础镜像, 配置文件名为 .ko.yaml ,

ko 执行时默认会在当前目录下寻找 .ko.yaml 文件,也可以通过 环境变量 KO_CONFIG_PATH 来指定 .ko.yaml 的路径

执行如下

还可以 通过.ko.yaml 文件中的 baseImageOverrides 对指定编译二进制替换基础镜像,如本示例中,设置如下:

修改 .ko.yaml 后,执行命令

Last updated