ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从源码构建 Velero(Ark):环境准备、编译、测试与部署运行全指南

从源码构建 Velero(Ark):环境准备、编译、测试与部署运行全指南 从源码构建 VeleroArk环境准备、编译、测试与部署运行全指南【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero本文以仓库中 Velero历史版本曾命名为 Heptio Ark的《Build from source》官方文档为骨架系统讲解从源码获取、编译二进制、构建与推送容器镜像、生成文件再生成、单元测试到本地模式与 Deployment 模式运行 Velero 的完整链路并结合当前仓库源码给出底层实现佐证与演进差异说明。读完本文你将掌握在任何平台上从零构建一个可用的 Velero 二进制与镜像并将其部署到 Kubernetes 集群中的完整实操能力。一、文档背景从 Ark 到 Velero 的历史脉络本文对应的原始文档是 Velero 前身 Heptio Ark 时代约 v0.10.0 版本的构建指南存放于site/content/docs/v0.10.0/build-from-scratch.md。彼时项目名称为Ark代码库地址为github.com/heptio/ark镜像名为ark命名空间为heptio-ark。随着项目从 Heptio 移交至 VMware Tanzu 并正式更名为Velero当前仓库中的一切标识均已随之演进维度历史Ark / v0.10.0当前仓库Velero源码导入路径github.com/heptio/arkgithub.com/vmware-tanzu/velero见 go.mod二进制名arkveleroMakefile 中BIN ? velero镜像名$REGISTRY/ark:$VERSION$(REGISTRY)/$(BIN)Makefile服务命名空间heptio-arkvelero官方文档目录site/content/docs/v0.10.0/site/content/docs/main/build-from-source.md阅读本文时请注意原始文档中关于项目名、仓库地址、命名空间的写法均为历史事实实操时应以当前仓库对应的新名称替换。以下各节会同时给出历史命令与当前仓库的对应实现便于按需对照。二、前置条件Prerequisites原文列出四项构建与运行 Velero 所需的基础条件可访问的 Kubernetes 集群版本 1.7 或更高若要执行ark backup delete现为velero backup delete则要求集群版本不低于 1.7.5集群内的 DNS 服务保证集群内服务发现正常工作已安装kubectl用于向集群下发 CRD、Deployment 等资源已安装 Go 开发环境最低版本要求 1.8。需要说明的是上述 Kubernetes 与 Go 的最低版本要求是 v0.10.0 时代的约束。现代 Velero 版本对 Kubernetes 与 Go 版本的要求更高具体以当前 site/content/docs/main/build-from-source.md 为准。三、获取源码Getting the source历史文档推荐通过go get获取源码并建议将 Go 的 import path 加入PATH以便后续直接执行编译产物mkdir $HOME/go export GOPATH$HOME/go go get github.com/heptio/ark对应的现代版本当前文档 site/content/docs/main/build-from-source.md为go get github.com/velero-io/velero此外也可以从 Release 页面下载名为Source code的源码归档解压到 Go import path 下的src/github.com/velero-io/velero。需要留意的是Makefile 目标假定在 git 仓库内构建会读取git rev-parse HEAD与工作区状态若从归档构建只能使用下述go build类的命令部分依赖 git 信息的 Makefile 目标将不可用。四、构建Build4.1 构建二进制在当前仓库根目录执行make build其默认构建linux-amd64平台Makefile 中ARCH ? linux-amd64。产物输出至_output/bin/GOOS/GOARCH目录例如 Linux 平台对应_output/bin/linux/amd64/velero。从源码看make build实际调用的是 hack/build.sh该脚本会强制CGO_ENABLED0进行静态编译并通过-ldflags注入构建元信息LDFLAGS-X ${PKG}/pkg/buildinfo.Version${VERSION} LDFLAGS${LDFLAGS} -X ${PKG}/pkg/buildinfo.ImageRegistry${REGISTRY} LDFLAGS${LDFLAGS} -X ${PKG}/pkg/buildinfo.GitSHA${GIT_SHA} LDFLAGS${LDFLAGS} -X ${PKG}/pkg/buildinfo.GitTreeState${GIT_TREE_STATE}这些信息会被 pkg/buildinfo/buildinfo.go 引用最终呈现在velero version命令的输出中同时velero install也会依据版本信息决定部署时使用的镜像 Tag。若需要覆盖部署镜像可在安装时使用--image参数。如果只想在本地快速构建本机平台的二进制不进入构建容器可执行go build ./cmd/velero # 或 make local其中make local会以go env GOOS-GOARCH自动探测当前平台Makefile。CLI 入口位于 cmd/velero/velero.go其主函数调用velero.NewCommand(baseName).Execute()完成命令行解析。4.2 交叉编译Cross compiling历史文档中为其他平台构建的方法是make build-GOOS-GOARCH例如为 macOS 构建make build-darwin-amd64所有二进制统一放入_output/bin/GOOS/GOARCH例如_output/bin/darwin/amd64/ark现代为velero。这一机制在当前 Makefile 中依然保留build-%目标见 Makefile。Makefile 还提供了一次性构建多平台的便利目标all-build。历史版本覆盖五个平台linux-amd64linux-armlinux-arm64darwin-amd64windows-amd64现代版本通过CLI_PLATFORMS变量扩展了更多平台Makefilelinux-amd64 linux-arm linux-arm64 darwin-amd64 darwin-arm64 windows-amd64 linux-ppc64le linux-s390x4.3 构建并推送容器镜像构建容器镜像需要先将$REGISTRY环境变量指向你自己的镜像仓库这样集群中的任意节点都能拉取到本地构建的镜像。设置方式export REGISTRYmyregistry.example.com/team然后在仓库根目录以 Tag$REGISTRY/ark:$VERSION构建镜像make container推送镜像到仓库make push对应现代版本镜像名为$(REGISTRY)/veleroTag 由$VERSION决定默认main见 Makefile。原文同时提到用kubectl将自定义镜像注入已有 Deploymentkubectl --namespaceheptio-ark set image deployment/ark ark$REGISTRY/ark:$VERSION现代对应命令为kubectl -n velero set image deploy/velero veleromyimagerepo/velero:$VERSION现代构建方式的额外要求Buildx值得注意的演进点现代 Makefile 的container目标依赖Docker Buildx。在 Makefile 中如果CONTAINER_TOOL不是 docker或BUILDX_ENABLED不为 true目标会直接报错并提示先启用 buildx。构建本地镜像与宿主机同架构时可直接make container若需构建多架构的混合镜像hybrid image例如同时支持linux/amd64与linux/arm64则需先完成以下一次性准备# 1. 若需跨平台构建容器镜像注册 QEMU 模拟器 docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # 2. 创建并引导 buildx builder docker buildx create --use --name builder docker buildx inspect --bootstrap之后将BUILDX_OUTPUT_TYPE设为registry构建并直接推送混合镜像必须推送到 registry因为本地无法承载全部平台的 manifestREGISTRYmyrepo BUILDX_OUTPUT_TYPEregistry make container # linux/amd64 REGISTRYmyrepo BUILDX_OUTPUT_TYPEregistry BUILD_ARCHamd64,arm64 make container # linux/amd64 linux/arm64镜像构建完成后若希望 Kubernetes 重新拉取同名新镜像可删除 Velero 相关 Pod 触发重建kubectl -n velero delete pods -l deployvelero4.4 更新生成文件Update generated files以下文件由源码自动生成不建议手工维护clientset客户端集合ListersShared informers共享 informer文档Protobuf/gRPC 类型当发生下列变更时需要运行make update重新生成新增/修改/删除命令行 flag 或帮助文本新增/修改/删除命令或子命令新增 API 类型从源码看make update实际执行 hack/update-all.sh该脚本会遍历执行hack/update-*.sh系列脚本包括hack/update-1fmt.sh代码格式化hack/update-2proto.shProtobuf/gRPC 代码生成hack/update-3generated-crd-code.shCRD 代码生成hack/update-4generated-issue-template.shIssue 模板生成其中 hack/update-2proto.sh 会调用protoc编译器以pkg/plugin/proto/下的.proto文件为输入pkg/plugin/proto 目录输出到pkg/plugin/generated/。因此当你增删改 Protobuf 消息或服务定义时需要安装 Protocol Buffers v3 编译器protoc运行对应 proto 生成脚本完成再生成。五、测试与校验Test运行单元测试make test执行生成文件一致性校验确保 clientset、listers、shared informers、文档等生成产物与源码保持同步make verify当前仓库中make test会通过构建容器执行 hack/test.shmake verify对应执行 hack/verify-all.sh见 Makefile。除此之外现代 Makefile 还提供了make lint运行 hack/lint.sh、make ci依次执行 modules 校验、verify、all、test等更完整的质量门禁Makefile。六、运行Run6.1 运行前置条件无论以哪种方式运行都需要为 Velero 准备以下权限与资源这些内容通常都已封装在 examples 目录的清单文件中集群内合适的 RBAC 权限对源集群与命名空间内全部数据的读权限对目标集群与命名空间的写权限云厂商凭据对卷volume的读写权限对对象存储中备份数据的读写权限一个BackupStorageLocation对象定义供 Velero server 使用可选一个VolumeSnapshotLocation对象定义用于对 PV 创建快照。6.2 创建集群以 AWS 为例原文给出了两个在 AWS 上快速搭建 Kubernetes 集群的途径使用 Amazon 官方的 CloudFormation 模板EC2 Quick Start for Kubernetes使用 eksctl即 Amazon EKS 的官方 CLI。6.3 方式一在本地运行 Velero server本地运行可以显著加速迭代开发——每次代码变更无需重新构建并重新部署 server 镜像直接重启本地进程即可生效。第一步设置云厂商凭据环境变量AWSAWS_SHARED_CREDENTIALS_FILE指向共享凭据文件GCPGOOGLE_APPLICATION_CREDENTIALSAzure 需要以下七个变量AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_SUBSCRIPTION_IDAZURE_TENANT_IDAZURE_STORAGE_ACCOUNT_IDAZURE_STORAGE_KEYAZURE_RESOURCE_GROUP第二步在集群中创建资源可以使用 examples 目录提供的示例配置。以 AWS 现有集群为例在仓库根目录执行编辑examples/aws/05-ark-backupstoragelocation.yaml将其指向你的 S3 bucket 与 region可用aws s3api list-buckets查看全部 bucket 名称可选编辑examples/aws/06-ark-volumesnapshotlocation.yaml指定 AWS region。00-prereqs.yaml包含全部自定义资源定义CRDs用于对 backup、restore、schedule 等资源执行增删改查同时还包含heptio-ark命名空间、arkServiceAccount以及将arkServiceAccount 授予 cluster-admin 角色的 ClusterRoleBindingkubectl apply -f examples/common/00-prereqs.yaml10-deployment.yaml是面向 AWS 的 Ark server 示例配置kubectl apply -f examples/aws/10-deployment.yaml05-ark-backupstoragelocation.yaml用于指定备份存储位置可单独应用也可连同可选的06-ark-volumesnapshotlocation.yaml一起应用kubectl apply -f examples/aws/05-ark-backupstoragelocation.yaml或kubectl apply -f examples/aws/05-ark-backupstoragelocation.yaml examples/aws/06-ark-volumesnapshotlocation.yaml第三步启动 Ark server确保ark已在PATH中或使用完整路径调用按需设置以下变量既可导出为环境变量也可作为命令行 flag 传入--kubeconfig指定 Ark server 与 Kubernetes apiserver 通信所用的 kubeconfig 文件路径--namespaceArk server 查找 backup、schedule、restore 资源所在的命名空间--log-level设置 Ark server 的日志级别--plugin-dir设置 Ark server 查找插件的目录--metrics-address设置 Prometheus 指标暴露的绑定地址与端口启动命令ark server现代版本对应velero server。6.4 方式二以 Deployment 方式运行使用 Deployment 安装 Ark各云厂商的 Deployment 示例位于examples/cloud-provider/10-deployment.yaml将 Deployment 的默认镜像替换为本地构建的镜像kubectl --namespaceheptio-ark set image deployment/ark ark$REGISTRY/ark:$VERSION其中$REGISTRY与$VERSION即构建镜像时使用的取值。6.5 关于 examples 目录的现状说明需要说明的是历史文档引用的examples/aws/、examples/common/等云厂商专属清单在当前仓库的 examples 目录中已不复存在现存的示例为通用场景包括examples/minio/00-minio-deployment.yaml基于 MinIO 的对象存储部署适合本地/离线验证examples/nginx-app/base.yaml 与 examples/nginx-app/with-pv.yaml带/不带 PV 的 nginx 应用示例常用于备份恢复演练examples/default-resource-modifier-cni.yaml默认资源修改器示例。具体云厂商的安装清单可参考对应版本的官方安装文档与 Release 资源。七、依赖 vendoring若需新增或升级被 vendor 的第三方依赖原文档指引读者参考《Vendoring dependencies》专文历史路径为同目录下vendoring-dependencies.md链接定义见原始文档 [11]。这一机制在现代仓库中已演进为 Go Modules 管理依赖锁定在 go.mod 与 go.sum 中新增/更新依赖后执行go mod tidy并通过make verify-modules校验模块文件与提交状态的一致性Makefile。八、构建流程速查表目标历史命令Ark现代命令Velero说明构建默认二进制linux-amd64make buildmake build产物在_output/bin/linux/amd64/交叉编译make build-darwin-amd64make build-darwin-amd64平台格式build-GOOS-GOARCH构建全部平台make all-buildmake all-build平台列表见CLI_PLATFORMS构建容器镜像make containermake container现代版本需启用 docker buildx推送镜像make pushdocker push现代默认输出类型为 docker单元测试make testmake test在构建容器内执行生成文件校验make verifymake verify执行hack/verify-all.sh再生成文件make updatemake update执行hack/update-all.sh本地运行 serverark servervelero server支持--kubeconfig等 flag结语从 Ark 到 Velero从go get到 Go Modules、从make push到 buildx 多架构构建本文以 v0.10.0 时代的构建文档为主线完整还原了「前置条件 → 获取源码 → 编译 → 测试 → 运行」的全流程并逐一映射到当前仓库的 Makefile、hack 脚本体系与 cmd/velero/velero.go 入口实现。无论是想要快速迭代的本地开发模式还是面向生产的多平台镜像交付上述流程都构成了可复用的基线。更详细的现代构建说明可继续阅读 site/content/docs/main/build-from-source.md。【免费下载链接】veleroBackup and migrate Kubernetes applications and their persistent volumes项目地址: https://gitcode.com/GitHub_Trending/ve/velero创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表