Velero 二次开发-02

举报
kaliarch 发表于 2022/04/04 20:24:45 2022/04/04
【摘要】 三 使用 Tilt 进行快速迭代 Velero 开发 3.1 概要本文档描述了如何将 Tilt 与任何集群一起使用,以实现简化的工作流,从而提供简单的部署和快速的迭代构建。这种设置允许继续部署 Velero 服务器,如果指定,则允许任何提供程序插件或 restic daemonset。它通过以下方式完成这项工作:部署必要的 Kubernetes 资源,例如 Velero CRD 和 Vel...

三 使用 Tilt 进行快速迭代 Velero 开发

3.1 概要

本文档描述了如何将 Tilt 与任何集群一起使用,以实现简化的工作流,从而提供简单的部署和快速的迭代构建。这种设置允许继续部署 Velero 服务器,如果指定,则允许任何提供程序插件或 restic daemonset。它通过以下方式完成这项工作:

  • 部署必要的 Kubernetes 资源,例如 Velero CRD 和 Velero 部署
  • 为 Velero 和(如果指定)提供程序插件构建本地二进制文件作为 local_resource
  • 调用 docker_build 将任何二进制文件实时更新到容器/初始化容器中并触发重新启动

Tilt 会在 velero/tilt-resources 下寻找配置文件。此目录中的大多数文件都被 gitignored 忽略,因此您可以根据需要配置您的设置。

3.2 先决条件

  1. Docker v19.03或更新的
  2. Kubernetes cluster v1.10或更高版本(不一定是 Kind)
  3. Tilt v0.12.0或更新版本
  4. 在本地克隆 Velero 项目存储库
  5. 访问 S3 对象存储
  6. 克隆您想要更改和部署的任何提供程序插件 (可选的,必须配置为由 Velero Tilt 的设置部署,更多信息见下)

注意: 要正确配置你使用的任何插件,请参考插件文档。

3.3 入门

3.3.1 配置

  • 将 velero/tilt-resources/examples 下的所有示例文件复制到 velero/tilt-resources 中。
  • 配置 velero_v1_backupstoragelocation.yaml 文件和存储凭证/密钥的云文件。
  • 运行tilt up

3.3.2 创建 tilt 设置文件

创建一个名为tilt-settings.json 的配置文件,并将其放在velero/tilt-resources 的本地副本中。或者,您可以复制并粘贴在 velero/tilt-resources/examples 中找到的示例文件。

例如:

{
    "default_registry": "",
    "enable_providers": [
        "aws",
        "gcp",
        "azure",
        "csi"
    ],
    "providers": {
        "aws": "../velero-plugin-for-aws",
        "gcp": "../velero-plugin-for-gcp",
        "azure": "../velero-plugin-for-microsoft-azure",
        "csi": "../velero-plugin-for-csi"
    },
    "allowed_contexts": [
        "development"
    ],
    "enable_restic": false,
    "create_backup_locations": true,
    "setup-minio": true,
    "enable_debug": false,
    "debug_continue_on_start": true
}

3.3.3 tilt-settings.json 字段

  • default_registry:(String, default=”"),如果你需要推送镜像到镜像仓库需要改字段,更详细可参考:Tilt *documentation
  • provider_repos:(Array[]String, default=[]),您要更改的所有提供程序插件的路径列表。每个提供者必须有一个tilt-provider.json 文件来描述如何构建提供者。
  • enable_providers (Array[]String, default=[]):要启用的提供程序插件列表。更多详细信息请参阅提供程序插件。注意: 当不对插件进行更改时,不需要将它们加载到 Tilt 中: 可以在 Velero 部署中指定一个现有的映像和版本,Tilt 将加载这些内容。
  • allowed_contexts (Array, default=[]):允许 Tilt 使用的 kubeconfig 上下文列表。有关更多详细信息,请参阅关于 *allow_k8s_contexts 的 Tilt 文档。注意: Kind 是自动允许的。
  • enable_restic (Bool, default=false):指示是否部署restic Daemonset。如果设置为 true,Tilt 将查找包含 Velero restic DaemonSet 配置的 velero/tilt-resources/restic.yaml 文件。
  • create_backup_locations (Bool, default=false):指示是否创建一个或多个备份存储位置。如果设置为 true,Tilt 将查找 velero/tilt-resources/velero_v1_backupstoragelocation.yaml 文件,其中至少包含一个 Velero 备份存储位置的配置。
  • setup-minio (Bool, default=false):如果要在集群内运行的 Minio 实例中配置备份存储位置,请将此配置为 true。
  • enable_debug (Bool, default=false):如果要使用 Delve 调试 velero 进程,请将此配置为 true。
  • debug_continue_on_start (Bool, default=true):如果您希望 velero 进程在调试模式下在启动时继续,请将此配置为 true。请参阅 Delve CLI documentation 文档。

3.4 创建要部署的 Kubernetes 资源文件

在 velero/tilt-resources/examples 目录中,提供了所有需要的 Kubernetes 资源文件,以便随时使用示例。你只需要将它们移动到 velero/tilt-resources 级别。

因为 Velero Kubernetes 的部署和恢复的 DaemonSet 包含所有要使用的插件的配置,所以这些资源的文件应该由用户提供,因此您可以选择加载哪个提供者插件作为 init 容器。目前,所提供的样例文件已经配置了 Velero 支持的所有插件,可以根据需要随意删除任何插件。

为了使 Velero 完全运行,它还需要至少一个备份存储位置。提供了一个示例文件,需要使用对象存储的特定配置对其进行修改。请参阅下一小节以获得更多关于此的详细信息。

3.5 配置一个backup storage location

您必须配置 velero/tilt-resources/velero _ v1 _ backupstoragellocation。根据您的存储提供程序使用适当的值。参考plugin documentation,了解特定提供者的备份存储位置配置需要哪些字段/值对。

下面是为 Velero 配置备份存储位置的一些方法。

3.5.1 使用公有云存储

按照提供程序文档来配置存储。我们有一个所有已知对象存储提供程序的列表,以及相应的 Velero 插件。list of all known object storage providers

3.5.2 使用MinIO作为对象存储

注意:要将 MinIO 用作对象存储,您需要使用 AWS plugin,并将存储位置配置为将 spec.provider 设置为 aws,将 spec.config.region 设置为 minio。例子:

spec:
  config:
    region: minio
    s3ForcePathStyle: "true"
    s3Url: http://minio.velero.svc:9000
  objectStorage:
    bucket: velero
  provider: aws

以下是使用 MinIO 作为存储的两种方法:

  1. 作为在集群内运行的 MinIO 实例(不要在生产环境中这样做!)

在tilt-settings.json 文件中,设置“setup-minio”:true。这将配置一个 Kubernetes 部署,其中包含集群内正在运行的 MinIO 实例。在集群外公开 MinIO 需要额外的步骤( extra steps)。

要访问这个存储,您需要使用 kubectl port-forward-n svc/MinIO 9000将 MinIO 端口转发到本地计算机,从而在集群之外暴露 MinIO。通过在 BSL 配置中添加 publicUrl: http://localhost:9000,更新 BSL 配置,将其作为其“公共 URL”。这对于下载备份文件是必要的。

注意:使用此设置,当您的集群终止时,其中的存储和任何备份/恢复也会终止。

  1. 作为在 Docker 容器中本地运行的独立 MinIO 实例 请参阅these instructions以在您的计算机上本地运行 MinIO,作为独立的而不是在 Pod 上运行它。

请参阅我们的locations documentation以了解更多备份位置的工作原理。

3.6 配置提供者凭据(secret)

无论您使用什么对象存储提供程序,都要在 velero/tilt-resources/cloud 文件中配置凭据。阅读插件文档,了解提供者的凭据需要哪些字段/值对。Tilt 文件将调用 Kustomize 在硬编码的密钥 secret.cloud-credentials 下创建秘密。名称空间中的 data.cloud。在 velero/tilt-resources/examples/cloud 中,有一个为 MinIO 存储凭证正确格式化的示例凭证文件。

3.7 使用 Delve 配置调试

如果您希望调试 Velero 进程,可以通过将字段 enable _ debug 设置为 true 在 tilt-resources/tile-settings 中启用调试模式。Json 文件。这将使您能够使用深入来调试进程。通过启用调试模式,将在调试模式下构建 Velero 可执行文件(使用 flags-gcflags = “-n-l”禁用优化和内联) ,并在使用 dlv exec的 Velero 部署中启动该进程。

调试服务器将接受端口2345上的连接,而 Tilt 被配置为将该端口转发到本地计算机。一旦 Tilt 运行并且 Velero 资源准备就绪,您就可以连接到调试服务器开始调试。要连接到会话,可以通过在本地运行 dlv connect 127.0.0.1:2345来使用深入的 CLI。有关如何使用深入研究的更多指导,请参阅 Delve CLI documentation。钻研也可以在许多editors and IDEs.

默认情况下,当处于调试模式时,Velero 进程将在启动时继续。这意味着进程将一直运行,直到设置了断点。可以通过在倾斜资源/平铺设置中将字段 debug _ continue _ on _ start 设置为 false 来禁用此选项。Json 文件。当此设置被禁用时,Velero 进程将不会继续运行,直到通过您的深入会话发出一个 continue 指令。

退出调试会话时,CLI 和编辑器集成通常会询问是否应该停止远程进程。保持远程进程运行并断开与调试会话的连接非常重要。通过停止远程进程,这将导致 Velero 容器停止和荚重新启动。如果正在进行备份,那么这些备份将处于不新鲜状态,因为在 Velero pod 重新启动时它们不会恢复。

3.8 运行Tilt

要启动您的开发环境,请运行:

tilt up

这将输出地址到一个网络浏览器界面,在那里你可以监视倾斜的状态和每个倾斜资源的日志。经过短暂的时间后,您应该已经有了一个正在运行的开发环境,现在应该能够创建备份/恢复并完全操作 Velero 了。

注意:退出 Tilt 后运行倾斜向下将 Tiltfile 中指定的will delete all resources

提示:为 velero/_tuiltbuild/local/velero 创建别名,您不必运行 make local 来获得 Velero CLI 的更新版本,只需使用别名即可。

请参阅文档how Velero works.

3.9 提供插件

提供者必须提供一个tilt-provider.json 文件来描述如何构建它。下面是一个例子:

{
  "plugin_name": "velero-plugin-for-aws",
  "context": ".",
  "image": "velero/velero-plugin-for-aws",
  "live_reload_deps": [
    "velero-plugin-for-aws"
  ],
  "go_main": "./velero-plugin-for-aws"
}

3.10 实时更新

每个配置为由 Velero 的 Tilt 设置部署的提供者插件都有一个 live _ reload_deps 列表。这定义了 Tilt 应该监视的文件和/或目录的更改。修改依赖项后,Tilt 在本地计算机上重新构建提供程序的二进制文件,将二进制文件复制到 init 容器,并触发 Velero 容器的重新启动。这比为每次更改重新生成容器映像要快得多。它还有助于保持每个开发映像的大小尽可能小(容器映像不需要整个 go 工具链、源代码、模块依赖性等)。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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

举报
请填写举报理由
0/200