准备 Linux 集群以进行部署

本页面介绍如何准备目标集群以进行部署。

准备工作

本文档假设您已完成迁移并获得了生成的工件。

确保目标集群具有 Docker 注册表的读取权限

在执行迁移的过程中,Migrate to Containers 会将代表迁移后的虚拟机的 Docker 映像上传到 Docker 注册表。这些 Docker 映像代表迁移虚拟机的文件和目录。

对于 Docker 注册表,您可以选择使用:

如需了解详情,请参阅定义数据存储库

将工作负载部署到用于迁移的项目之外的 Google Cloud 项目

您的环境中通常有多个 Google Cloud 项目。如果您在一个 Google Cloud 项目中执行迁移,但想要将迁移后的工作负载部署到其他项目中的集群,则必须确保已正确配置权限。

例如,在项目 A 中执行迁移。在这种情况下,迁移的工作负载会复制到项目 A 中的 Container Registry 存储桶。例如:

gcr.io/project-a/image_name:image_tag

然后,您可以将工作负载部署到项目 B 中的集群。如果您没有正确配置权限,则工作负载 pod 无法运行,因为项目 B 中的集群没有对项目 A 的映像拉取访问权限。然后,您会在 pod 中看到一个包含消息的事件,消息格式如下:

Failed to pull image "gcr.io/project-a/image_name:image_tag...
pull access denied...
repository does not exist or may acquire 'docker login'...

所有已启用 Compute Engine API 的项目都有一个 Compute Engine 默认服务账号,该账号具有以下电子邮件地址:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

其中,PROJECT_NUMBER 是项目 B 的项目编号。

如需解决此问题,请确保项目 B 的 Compute Engine 默认服务账号具有访问 Container Registry 存储桶所需的权限。例如,您可以使用以下 gsutil 命令启用访问权限:

gsutil iam ch serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com:objectViewer gs://artifacts.project-a.appspot.com

在处理集群上部署工作负载

您可以将迁移后的工作负载部署在您用于执行迁移的同一集群上,此集群称为 Migrate to Containers 处理集群。在大多数情况下,您不必对处理集群执行任何额外配置,因为该集群已经是需要有 Docker 注册表的读写访问权限才能执行迁移。

在目标集群上部署并使用 Container Registry 作为 Docker 注册表

如需确保目标集群可以访问 Container Registry,请创建包含访问 Container Registry 所需的凭据的 Kubernetes Secret:

  1. 按照创建用于访问 Container Registry 和 Cloud Storage 的服务账号中所述,创建用于部署的服务账号。

    此过程允许您下载名为 m4a-install.json 的 JSON 密钥文件。

  2. 创建包含访问 Container Registry 所需的凭据的 Kubernetes Secret:

    kubectl create secret docker-registry gcr-json-key \
     --docker-server=gcr.io --docker-username=_json_key --docker-password="$(cat ~/m4a-install.json.json)" \
     --docker-email=account@project.iam.gserviceaccount.com

    其中:

    • docker-registry 用于指定 Kubernetes Secret 的名称,在此示例中为 gcr-json-key
    • docker-server=gcr.io 用于将 Container Registry 指定为服务器。
    • docker-username=_json_key 用于指定 JSON 密钥文件中包含用户名。
    • docker-password 用于指定使用 JSON 密钥文件中的密码。
    • docker-email 用于指定服务账号的电子邮件地址。
  3. 使用以下任一方法设置 Kubernetes Secret:

    • 更改默认的 imagePullSecrets 值:

      kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "gcr-json-key"}]}'
    • 修改 deployment_spec.yaml 文件以将 imagePullSecrets 值添加到 spec.template.spec 定义中。使用 WebSphere 传统工作负载时,部署 YAML 文件名为 twas_deployment_spec.yamlliberty_deployment_spec.yamlopenliberty_deployment_spec.yaml,具体取决于您的目标。

      spec:
        containers:
        - image: gcr.io/PROJECT_ID/mycontainer-instance:v1.0.0
          name: mycontainer-instance
          ...
        volumes:
        - hostPath:
            path: /sys/fs/cgroup
            type: Directory
          name: cgroups
        imagePullSecrets:
        - name: gcr-json-key

      PROJECT_ID 替换为您的项目 ID。

  4. 部署工作负载 Secret(如果存在 secrets.yaml)。基于 Tomcat 的工作负载和基于 Liberty 的 WebSphere 传统工作负载将存在 Secret 文件。Liberty 文件名为 liberty-secrets.yaml

    kubectl apply -f secrets.yaml

在目标集群上部署并使用具有基本身份验证的 Docker 注册表

如果您使用 Docker 注册表来存储迁移映像,则注册表必须支持使用用户名和密码进行基本身份验证。您可以通过多种方式配置与 Docker 注册表的只读连接,因此您应该使用适合您的集群平台和 Docker 注册表的方法。

后续步骤