为部署准备 Linux 集群
本页面介绍了如何为部署准备目标集群。
准备工作
本文档假设您已完成迁移并获得了生成的工件。
确保目标集群具有 Docker 注册表的读取权限
在执行迁移的过程中,Migrate to Containers 会将代表迁移后的虚拟机的 Docker 映像上传到 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 存储桶所需的权限。例如,您可以使用以下 gcloud storage
命令启用访问权限:
gcloud storage buckets add-iam-policy-binding gs://artifacts.project-a.appspot.com --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
在目标集群上部署并使用 Container Registry 作为 Docker 注册表
如需确保目标集群可以访问 Container Registry,请创建包含访问 Container Registry 所需的凭据的 Kubernetes Secret:
按照创建用于访问 Container Registry 和 Cloud Storage 的服务账号中所述,创建用于部署的服务账号。
此过程允许您下载名为
m4a-install.json
的 JSON 密钥文件。创建包含访问 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
用于指定服务账号的电子邮件地址。
使用以下任一方法设置 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.yaml
、liberty_deployment_spec.yaml
或openliberty_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。
部署工作负载 Secret(如果存在
secrets.yaml
)。基于 Tomcat 的工作负载和带有 Liberty 的传统 WebSphere 工作负载存在 Secret 文件。Liberty 文件名为liberty-secrets.yaml
。kubectl apply -f secrets.yaml
在目标集群上部署并使用具有基本身份验证的 Docker 注册表
如果您使用 Docker 注册表来存储迁移映像,则注册表必须支持使用用户名和密码进行基本身份验证。您可以通过多种方式配置与 Docker 注册表的只读连接,因此您应该使用适合您的集群平台和 Docker 注册表的方法。
后续步骤
- 了解如何构建和部署基于 Linux 的工作负载。
- 了解如何为基于 Windows 的工作负载自定义迁移制品。
- 了解如何构建和部署基于 Windows 的工作负载。
- 了解如何查看生成的文件以部署 Linux 系统容器。