第 2 章 从 OpenShift Container Platform 4.1 进行迁移
2.1. 迁移工具和先决条件
您可以使用集群应用程序迁移 (CAM) 工具将应用程序工作负载从 OpenShift Container Platform 4.1 迁移到 4.4。使用 CAM 工具,您可以控制迁移并最小化应用程序的停机时间。
只要正确配置了源和目标集群,就可以在相同版本的 OpenShift Container Platform 集群间进行迁移(如从 4.1 迁移到 4.1)。
CAM 工具的 web 控制台和 API,基于 Kubernetes 自定义资源,您可以按照命名空间迁移有状态及无状态的应用程序工作负载。
CAM 工具支持文件系统和快照数据复制方法,用于将数据从源集群迁移到目标集群。您可以选择适合于您的环境并受您的存储供应商支持的方法。
您可以在迁移期间的特定点使用迁移 hook 运行 Ansible playbook。您在创建迁移计划时可以添加 hook。
2.1.1. 迁移先决条件
- 必须将源集群升级到最新的 z-stream 版本。
-
需要在所有集群中都有
cluster-admin
权限。 - 源和目标集群必须有对复制存储库的不受限制的网络访问权限。
- 安装 Migration controller 的集群必须具有对其他集群的不受限制的访问权限。
如果应用程序使用
openshift
命名空间中的镜像,则目标集群中必须有所需的镜像版本。如果没有所需的镜像,您必须更新
imagestreamtags
的引用以使用与应用程序兼容的可用版本。如果无法更新imagestreamtags
,您可以手动将相关的镜像上传到应用程序命名空间中,并更新应用程序以引用它们。
以下 imagestreamtags
已从 OpenShift Container Platform 4.2 中删除:
-
dotnet:1.0
,dotnet:1.1
,dotnet:2.0
-
dotnet-runtime:2.0
-
mariadb:10.1
-
mongodb:2.4
、mongodb:2.6
-
mysql:5.5
、mysql:5.6
-
nginx:1.8
-
nodejs:0.10
、nodejs:4
、nodejs:6
-
perl:5.16
、perl:5.20
-
php:5.5
、php:5.6
-
postgresql:9.2
,postgresql:9.4
,postgresql:9.5
-
python:3.3
、python:3.4
-
ruby:2.0
、ruby:2.2
以下 imagestreamtags
已从 OpenShift Container Platform 4.4 中删除:
-
dotnet: 2.2
-
dotnet-runtime: 2.2
-
nginx: 1.12
-
nodejs: 8, 8-RHOAR, 10-SCL
-
perl:5.24
-
php: 7.0, 7.1
-
redis: 3.2
2.1.2. 关于集群应用程序迁移(CAM)工具
集群应用程序迁移 (CAM) 工具可让您使用 CAM web 控制台或 Kubernetes API 将 OpenShift Container Platform 源集群中的 Kubernetes 资源、持久性卷数据和内部容器镜像迁移到 OpenShift Container Platform 4.4 目标集群。
使用 CAM web 控制台迁移应用程序涉及以下步骤:
在所有集群中安装 Cluster Application Migration Operator
您可以在有限的或没有互联网访问的受限环境中安装 Cluster Application Migration Operator。源和目标集群必须可以在相互间进行访问,而需要可以访问 registry 的镜像(mirror).
配置复制存储库,这是 CAM 工具用来迁移数据的中间对象存储
源和目标集群必须有对复制存储库的不受限制的网络访问权限。在受限环境中,您可以使用内部托管的 S3 存储存储库。如果使用代理服务器,您必须确保将复制存储库列入白名单。
- 在 CAM web 控制台中添加源集群
- 在 CAM web 控制台中添加复制存储库
创建迁移计划,包含以下数据迁移选项之一:
Copy:CAM 工具将数据从源集群复制到复制存储库,再从复制存储库把数据复制到目标集群。
Move:CAM 工具从源集群中卸载一个远程卷(例如 NFS),在目标集群上创建一个指向这个远程卷的 PV 资源,然后在目标集群中挂载远程卷。在目标集群中运行的应用程序使用源集群使用的同一远程卷。远程卷必须可以被源集群和目标集群访问。
注意虽然复制存储库没有出现在此图表中,但实际迁移过程需要它。
运行迁移计划,使用以下选项之一:
Stage (可选)在不停止应用程序的情况下将数据复制到目标集群。
Stage 可以多次运行,以便在迁移前将大多数数据复制到目标。这样可最小化实际迁移时间和应用程序停机时间。
- Migrate 在源集群中停止应用程序,并在目标集群中重新创建其资源。您可以选择在不停止应用程序的情况下迁移工作负载。
2.1.3. 关于数据复制方法
CAM 工具支持文件系统和快照数据复制方法,用于将数据从源集群迁移到目标集群。您可以选择适合于您的环境并受您的存储供应商支持的方法。
2.1.3.1. 文件系统复制方法
CAM 工具将数据文件从源集群复制到复制存储库,并从那里复制到目标集群。
优点 | 限制: |
---|---|
|
|
2.1.3.2. 快照复制方法
CAM 工具将源集群的数据快照复制到云供应商的对象存储,后者配置为复制存储库。数据在目标集群上恢复。
AWS、Google Cloud Provider 和 Microsoft Azure 支持快照复制方法。
优点 | 限制: |
---|---|
|
|
2.1.4. 关于迁移 hook
您可以在迁移期间的特定点使用迁移 hook 运行 Ansible playbook。您在创建迁移计划时可以添加 hook。
如果您不想使用 Ansible playbook,您可以创建自定义容器镜像并将其添加到迁移计划中。
迁移 hook 执行的任务包括自定义应用程序默认、手动迁移不受支持的数据类型以及在迁移后更新应用程序。
在源集群或目标集群中以以下迁移步骤之一运行单个迁移 hook:
- PreBackup: 在源集群上启动备份前的任务
- PostBackup: 在源集群中完成备份任务后
- PreRestore: 在目标集群上启动恢复前的任务
PostRestore: 在目标集群中完成恢复后的任务
您可以为每个迁移步骤分配一个 hook,单个迁移计划最多可分配四个 hook。
默认 hook-runner
镜像为 registry.redhat.io/rhcam-1-2/openshift-migration-hook-runner-rhel7
。该镜像基于 Ansible Runner,并包括用于 Ansible Kubernetes 资源的 python-openshift
以及更新的 oc
二进制文件。您还可以使用其他 Ansible 模块或工具创建自己的 hook 镜像。
Ansible playbook 作为一个 ConfigMap 挂载到 hook 容器上。hook 容器在具有指定服务帐户和命名空间的集群中作为一个作业(job)运行。作业运行(即使初始 Pod 被驱除或终止),直到达到默认的 backoffLimit
(6
)或成功完成为止。