Velero 二次开发-03

举报
kaliarch 发表于 2022/04/04 20:25:19 2022/04/04
【摘要】 四 从源代码构建 4.1 先决条件访问 Kubernetes 集群,版本 1.7 或更高版本。集群上的 DNS 服务器安装了 kubectlGo 安装(最低版本 1.8) 4.2 获取源码从最新源码获取mkdir $HOME/goexport GOPATH=$HOME/gogo get github.com/vmware-tanzu/velero 哪里是 Go 的导入路径。对于 Go 开发...

四 从源代码构建

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 将容器映像发布到注册表

要将容器映像发布到注册表,需要进行以下一次性设置:

  1. 如果您正在构建跨平台容器映像

  2. $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    
  3. 创建并引导一个新的 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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。