定义数据存储区

在执行迁移的过程中,Migrate to Containers 会将信息写入不同的数据存储区:

  1. 代表迁移后虚拟机的 Docker 映像文件将写入 Docker 注册表。

    这些 Docker 映像文件代表迁移后的 Linux 虚拟机的文件和目录。迁移 Windows 工作负载时不需要此存储区。

  2. 代表迁移后工作负载的迁移工件将写入数据存储区。

    工件包括配置 YAML 文件,可用于部署迁移后的工作负载以及其他文件。确切的工件取决于您要迁移的是 Linux 还是 Windows 工作负载。

平台 Docker 映像文件注册表* 迁移工件存储区
Google Cloud 上的 GKE Enterprise 集群 默认为 Container Registry (GCR)

(可选)指定支持基本身份验证的任何 Docker 注册表。

默认值为 Cloud Storage

(可选)指定 S3 作为 Linux 迁移的工件存储区。不支持将 S3 用于迁移 Windows 工作负载。

Google Distributed Cloud Virtual for Bare Metal 集群 默认为 Container Registry (GCR)

(可选)指定支持基本身份验证的任何 Docker 注册表。

默认值为 Cloud Storage

(可选)指定 S3 作为工件代码库。

* Windows 迁移不需要 Docker 映像文件注册表。只有迁移 Linux 虚拟机时才需要它。

查看存储区状态

安装 Migrate to Containers 后,您可以运行 migctl doctor 命令来验证 Migrate to Containers 安装。在验证过程中,migctl doctor 命令会检查存储区的状态:

migctl doctor

migctl doctor 命令的以下示例输出中,对勾标记表示 Migrate to Containers 已成功部署,但您尚未配置必要的数据存储库:

  [✓] Deployment
  [!] Docker Registry
  [!] Artifacts Repo
  [!] Source Status

如果您的代码库出现问题,则在运行该命令时 migctl doctor 会对这些代码库进行标记。在运行 migctl doctor 时,migctl 会查询所有工件代码库,并针对每个健康状况不佳的代码库发出警告。

migctl doctor 命令的以下示例输出中,感叹号表示 Migrate to Containers 在工件代码库中发现了错误。根据相应错误,代码库未能初始化,应该修复配置,然后再次运行该命令。对于除默认代码库之外的其他代码库,这不一定会阻碍迁移。

如果默认代码库健康状况不佳,则 X 表示 Migrate to Containers 发现了错误且迁移可能会失败。

[✓] Deployment
[✓] Docker Registry
[!] Artifacts Repository
    [✓] example-healthy-repository [default]
    [!] example-failed-repository
        Error: Failed to initialize repository client: Retryable M4A_RepositoryFactoryMissingSecret: artifacts repository secret is configured, but not found at the designated location '/example-failed-repository'
[!] Source Status
[✓] Default storage class

配置存储区后,您可以再次运行 migctl doctor 命令以确保存储区配置正确:

  [✓] Deployment
  [✓] Docker registry
  [✓] Artifacts repo
  [!] Source Status

Google Cloud 控制台支持

Google Cloud 控制台根据存储区实现显示存储区中的项目的网址。例如,如果存储库是使用 S3 实现的,则 Google Cloud 控制台会在 S3 中显示存储桶的网址。

存储库位置的选项

数据存储库的位置会对迁移性能和费用产生影响。

例如,代表迁移后虚拟机的 Docker 映像文件可能会非常大。如果您有本地处理集群,但将 Docker 映像文件写入 Google Cloud 上的 GCR,则会导致数据上传的性能延迟和。

对于本地处理集群,您可能会发现定义集群本地的 Docker 注册表更高效。通过让注册表在本地运行,可以最大限度地缩短上传延迟时间并最大限度地降低存储费用。

对于部署在 Google Cloud 上的 GKE 集群,使用默认 GCR 代码库可获得最佳性能,但您需要支付该存储空间的费用。但是,您无需将 GCR 与云端集群搭配使用,并且可以选择使用您自己的 Docker 注册表。

存储区命名要求

将存储区添加到 Migrate to Containers 中时,您需要为其指定一个名称。名称必须符合以下要求:

  • 最多包含 63 个字符。
  • 只能包含小写字母数字字符或“-”(连字符)。
  • 以字母数字字符开头。
  • 以字母数字字符结尾。

存储区身份验证

Migrate to Containers 使用的所有存储区都需要进行身份验证。身份验证机制取决于存储区类型,如下表所示:

存储区 实现 身份验证
Docker 映像文件注册表 GCR Google Cloud 服务账号的 JSON 密钥。

如需了解详情,请参阅创建服务账号以访问 Container Registry 和 Cloud Storage

Docker 注册表 用于基本身份验证的用户名和密码。
迁移工件存储区 Cloud Storage Google Cloud 服务账号的 JSON 密钥。

如需了解详情,请参阅创建服务账号以访问 Container Registry 和 Cloud Storage

S3 访问密钥和密钥或凭据文件。如需了解详情,请参阅访问权限管理概览

支持 TLS

一些存储区可使用 TLS/SSL 通过 HTTPS 进行访问。如果与存储区的 HTTPS 连接使用自签名证书,则必须在配置存储区时传递一个包含以下内容的 PEM 文件:

  • 自签名证书的公钥
  • 从根证书和所有中间证书直到实际服务器证书的串联

配置 Docker 注册表

使用 migctl 命令来配置 Docker 注册表。使用 migctl 命令,您可以对注册表配置执行以下操作:

  • 创建
  • 更新
  • 删除
  • 列表
  • 设为默认

您可以定义多个配置。Migrate to Containers 使用当前定义为“默认”的配置。使用 migctl docker-registry list 命令查看当前配置,包括默认配置。使用 migctl docker-registry set-default 命令设置默认配置。

以下示例展示了如何配置 Docker 注册表:

  • GCR

    migctl docker-registry create gcr registry-name --project project-id --json-key=m4a-install.json

    其中:

    • registry-name 是用户定义的 Docker 注册表配置的名称。

    • project-id 是 Google 项目 ID

    • m4a-install.json 是用于访问 Container Registry 和 Cloud Storage 的服务账号的 JSON 密钥文件的名称,如配置服务账号中所述。

  • Docker 注册表

    migctl docker-registry create basic-auth registry-name --registry-path url --username username --ca-pem-file ca-pem-filename

    其中:

    • registry-name 是用户定义的 Docker 注册表配置的名称。

    • url 指定注册表的网址(不含 http://https:// 前缀)。例如 localhost:8080/myregistry

    • username 用于注册表的基本身份验证凭据。系统会提示您输入密码。

    • 如果注册表使用自签名证书,则 ca-pem-filename 指定包含公钥或完整 CA 链(意味着从中间 CA 证书直到根证书的串联)的 PEM 文件。例如:

      cat int1.pem int2.pem ... root.pem

稍后如需更新注册表配置,请使用与创建该配置相同的参数运行 migctl docker-registry update 命令:

migctl docker-registry update gcr registry-name same-flags-as-create

配置 Docker 注册表时,它将成为默认注册表。但是,您可能定义了多个注册表。如需查看当前注册表列表,请运行以下命令:

migctl docker-registry list

如需设置默认注册表配置(即当前用于迁移的配置),请使用以下命令:

migctl docker-registry set-default registry-name

如需删除注册表配置,请运行以下命令:

migctl docker-registry delete registry-name

配置工件存储区

使用 migctl 命令配置工件存储区。使用 migctl 命令,您可以对存储区配置执行以下操作:

  • 创建
  • 更新
  • 删除
  • 列表
  • 设为默认

migctl 命令 createupdatelist 都会对工件代码库进行持续健康检查。运行这些命令后,它们会提供指示代码库是否准备就绪的消息以及关联的错误消息。如需跳过 createupdate 的健康检查,请在运行这些命令时使用 --async 标志。

您可以定义多个配置。Migrate to Containers 使用当前定义为“默认”的配置。使用 migctl artifacts-repo list 命令查看当前配置,包括默认配置。使用 migctl artifacts-repo set-default 命令设置默认配置。

以下示例展示了如何配置工件代码库:

  • Cloud Storage

    migctl artifacts-repo create gcs repository-name --bucket-name bucket-name --json-key=m4a-install.json

    其中:

    • repository-name 是用户定义的工件存储库配置名称。

    • bucket-name 指定 Cloud Storage 存储区中的现有存储分区。如果您没有现有存储桶,请按照创建存储桶中的说明创建一个存储桶。

      注意:在 Google Cloud 上的集群中安装 Migrate to Containers 时,Migrate to Containers 安装程序会自动创建名称如下的默认存储桶:

      GCP_PROJECT-migration-artifacts

      其中 GCP_PROJECT 是 Google 项目 ID

    • project-id 是 Google 项目 ID

    • m4a-install.json 是用于访问 Container Registry 和 Cloud Storage 的服务账号的 JSON 密钥文件的名称,如配置服务账号中所述。

    migctl artifacts-repo create s3 repository-name --bucket-name bucket-name --region aws-region --access-key-id=key-id

    系统会提示您输入 key-id 的 Secret 密钥。

    或者,指定凭据文件的路径:

    migctl artifacts-repo create s3 repository-name --bucket-name bucket-name --region aws-region --credentials-file-path file-path

    其中:

    • repository-name 是用户定义的工件存储区配置的名称。

    • bucket-name 指定 S3 存储区中的现有存储分区。如果您当前没有存储桶,请按照使用 Amazon S3 存储桶中的说明创建一个存储桶。

    • aws-region 指定存储区的 AWS 区域。只要集群有权访问存储区,处理集群和存储区就可以位于不同区域。

    • key-id 指定访问密钥。如需了解详情,请参阅访问权限管理概览

    • file-path 指定从 AWS 控制台下载的 CSV 文件的路径(该文件包含凭据)。

稍后如需更新存储区配置,请使用与创建该配置相同的参数运行 migctl docker-registry update 命令:

migctl artifacts-repo update gcr repository-name same-flags-as-create

配置存储区注册表时,它将成为默认存储区。但是,您可能定义了多个存储区。如需查看当前存储区列表,请运行以下命令:

migctl artifacts-repo list

如需设置默认存储区配置(即当前用于迁移的配置),请使用以下命令:

migctl artifacts-repo set-default repository-name

如需删除存储库配置,请执行以下操作:

migctl artifacts-repo delete repository-name

后续步骤