Velero 二次开发-03
四 从源代码构建
4.1 先决条件
- 访问 Kubernetes 集群,版本 1.7 或更高版本。
- 集群上的 DNS 服务器
- 安装了 kubectl
- Go 安装(最低版本 1.8)
4.2 获取源码
- 从最新源码获取
mkdir $HOME/go
export GOPATH=$HOME/go
go get github.com/vmware-tanzu/velero
哪里是 Go 的导入路径。
对于 Go 开发,建议将 Go 导入路径(本例中为 $HOME/go)添加到您的路径中。
- 制定版本拉取
从release page下载名为 Source code 的归档文件,并将其作为 src/ github.com/vmware-tanzu/velero
文件在 Go 导入路径中解压缩。注意,Makefile 目标假定从 git 存储库构建。当从存档构建时,您只能使用下面描述的 go build 命令。
4.3 构建
根据您的需要,有许多不同的方法来建立 velero。这一节概述了主要的可能性。当使用 make 进行构建时,它将把二进制文件放在_ output/bin/$GOOS/$GOARCH
下。例如,您可以在这里找到 darwin 的二进制文件: _ output/bin/darwin/amd64/velero,以及 linux 的二进制文件:_ output/bin/linux/amd64/velero
。Make 还将拼接版本和 git 提交信息,以便 velero 版本显示适当的输出。
注意: velero install 还将使用版本信息来确定要部署哪个标记的映像。如果您想覆盖部署的映像,请使用映像标志(参见下面关于如何构建映像的说明)。
4.4 构建二进制
要在本地机器上构建为操作系统和架构编译的 velero 二进制文件,请运行以下两个命令之一:
go build ./cmd/velero
make local
4.5 交叉编译
要在本地机器上的构建容器中构建针对 linux/amd64 的 velero 二进制文件,请运行:
对于任何特定平台,运行 make build-<GOOS>-<GOARCH>。 例如,要为 Mac 构建,请运行 make build-darwin-amd64。 Velero 的 Makefile 有一个方便的目标,all-build,它构建以下平台:
- linux-amd64
- linux-arm
- linux-arm64
- linux-ppc64le
- darwin-amd64
- windows-amd64
4.6 编译镜像和升级velero
如果在安装 Velero 后,您想将其部署使用的映像更改为包含您的代码更改的映像,您可以通过更新映像来实现:
kubectl -n velero set image deploy/velero velero=myimagerepo/velero:$VERSION
要构建 Velero 容器映像,您需要先配置 buildx。
4.7 Buildx
Docker Buildx 是一个 CLI 插件,它通过 Moby BuildKit builder 工具包提供的特性来扩展 Docker 命令。它提供了与 docker 构建相同的用户体验,并具有许多新特性,比如创建有作用域的构建实例和并发构建多个节点。
更多信息可参考: docker docs and in the buildx github repo.
4.8 镜像构建
设置 $REGISTRY 环境变量。例如,如果你想创建 gcr.io/my-REGISTRY/velero:main 图像,将 $REGISTRY 设置为 gcr.io/my-REGISTRY。如果未设置此变量,则默认值为 velero。
可以选择,设置 $VERSION 环境变量来更改图像标记或 $BIN 来更改要为其构建容器图像的二进制文件。然后,跑:
注意:要为 velero 和 velero-restic-restore-helper 构建构建容器镜像,请运行:make all-containers
4.9 将容器映像发布到注册表
要将容器映像发布到注册表,需要进行以下一次性设置:
-
如果您正在构建跨平台容器映像
-
$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
-
创建并引导一个新的 docker buildx 构建器
$ docker buildx create --use --name builder
builder
$ docker buildx inspect --bootstrap
[+] Building 2.6s (1/1) FINISHED
=> [internal] booting buildkit 2.6s
=> => pulling image moby/buildkit:buildx-stable-1 1.9s
=> => creating container buildx_buildkit_builder0 0.7s
Name: builder
Driver: docker-container
Nodes:
Name: builder0
Endpoint: unix:///var/run/docker.sock
Status: running
Platforms: linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
注意:如果没有上述设置, docker buildx inspect --bootstrap 的输出将是:
$ docker buildx inspect --bootstrap
Name: default
Driver: docker
Nodes:
Name: default
Endpoint: default
Status: running
Platforms: linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
并且 REGISTRY=myrepo BUILDX_OUTPUT_TYPE=registry make 容器将失败并显示以下错误
$ REGISTRY=ashishamarnath BUILDX_PLATFORMS=linux/arm64 BUILDX_OUTPUT_TYPE=registry make container
auto-push is currently not implemented for docker driver
make: *** [container] Error 1
完成上述一次性设置后,现在 docker buildx inspect --bootstrap 的输出应该是这样的
$ docker buildx inspect --bootstrap
Name: builder
Driver: docker-container
Nodes:
Name: builder0
Endpoint: unix:///var/run/docker.sock
Status: running
Platforms: linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v
现在通过运行 make container 命令并将 $BUILDX_OUTPUT_TYPE 设置为 registry 来构建和推送容器镜像
$ REGISTRY=myrepo BUILDX_OUTPUT_TYPE=registry make container
4.10 跨平台编译
支持的 Docker buildx 平台:
linux/amd64
linux/arm64
linux/arm/v7
linux/ppc64le
对于任何特定平台,运行 BUILDX_PLATFORMS=<GOOS>/<GOARCH> make container
例如,要为 arm64 构建映像,请运行:
BUILDX_PLATFORMS=linux/arm64 make container
注意:默认情况下,$BUILDX_PLATFORMS 设置为 linux/amd64 使用 buildx,您还可以同时构建所有支持的平台并将多架构映像推送到注册表。例如:
REGISTRY=myrepo VERSION=foo BUILDX_PLATFORMS=linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le BUILDX_OUTPUT_TYPE=registry make all-containers
注意: 当同时为多于1个平台构建时,您需要将 BUILDX _ output _ type 设置为注册表,因为本地多拱图像尚不受支持。注意: 如果你想更新图片但不改变它的名字,你必须触发 Kubernetes 选择新的图片。一种方法是删除 Velero 部署 pod:
kubectl -n velero delete pods -l deploy=velero
- 点赞
- 收藏
- 关注作者
评论(0)