从中迁移应用程序的集群。
目标集群
[1]
将应用程序迁移到的集群。
复制软件仓库
用于在间接迁移过程中复制镜像、卷和 Kubernetes 对象的对象存储,或者用于直接卷迁移或直接镜像迁移期间 Kubernetes 对象的对象存储。
复制存储库必须可以被所有集群访问。
运行
migration-controller
pod 和 Web 控制台的集群。主机集群通常是目标集群,但这不是必需的。
主机集群不需要公开的 registry 路由来直接迁移镜像。
远程集群通常是源集群,但这不是必需的。
远程集群需要一个包含
migration-controller
服务帐户令牌的
Secret
自定义资源。
远程集群需要一个公开的安全 registry 路由来直接迁移镜像。
镜像、卷和 Kubernetes 对象从源集群复制到复制存储库,然后从复制存储库复制到目标集群。
直接卷迁移
持久性卷直接从源集群复制到目标集群。
直接镜像迁移
镜像直接从源集群复制到目标集群。
在不停止应用程序的情况下,数据将复制到目标集群。
多次运行阶段迁移会缩短迁移的持续时间。
应用在源集群中停止,其资源迁移到目标集群。
通过将特定的持久性卷声明复制到目标集群来迁移应用程序状态。
回滚迁移会回滚一个已完成的迁移。
1
在 MTC web 控制台中称为
目标集群
。
您可以使用 MTC web 控制台或 Kubernetes API 将 Kubernetes 资源、持久性卷数据和内部容器镜像迁移到 OpenShift Container Platform 4.15。
MTC 迁移以下资源:
在迁移计划中指定的命名空间。
命名空间范围的资源:当 MTC 迁移命名空间时,它会迁移与该命名空间关联的所有对象和资源,如服务或 Pod。另外,如果一个资源在命名空间中存在但不在集群级别,这个资源依赖于集群级别存在的另外一个资源,MTC 会迁移这两个资源。
例如,安全性上下文约束(SCC)是一个存在于集群级别的资源,服务帐户(SA)是存在于命名空间级别的资源。如果 MTC 迁移的命名空间中存在 SA,MTC 会自动找到链接到 SA 的所有 SCC,并迁移这些 SCC。同样,MTC 会迁移链接到命名空间持久性卷声明的持久性卷。
根据资源,可能需要手动迁移集群范围的资源。
自定义资源 (CR) 和自定义资源定义 (CRD):MTC 在命名空间级别自动迁移 CR 和 CRD。
使用 MTC Web 控制台迁移应用程序涉及以下步骤:
在所有集群中安装 MTC Operator。
您可以在有限的或没有互联网访问的受限环境中为 Containers Operator 安装 Migration Toolkit。源和目标集群必须可以在相互间进行访问,而需要可以访问 registry 的镜像(mirror).
配置复制存储库,这是 MTC 用来迁移数据的中间对象存储。
源和目标集群必须有对复制仓库的不受限制的网络访问权限。如果使用代理服务器,您必须将其配置为允许复制仓库和集群间的网络流量。
在 MTC web 控制台中添加源集群。
在 MTC web 控制台中添加复制存储库。
创建迁移计划,包含以下数据迁移选项之一:
Copy
:MTC 将数据从源集群复制到复制存储库,再从复制存储库把数据复制到目标集群。
如果您使用直接镜像迁移或直接卷迁移,则镜像或卷会直接从源集群复制到目标集群。
Move
:MTC 从源集群中卸载一个远程卷(例如 NFS),在目标集群上创建一个指向这个远程卷的 PV 资源,然后在目标集群中挂载远程卷。在目标集群中运行的应用程序使用源集群使用的同一远程卷。远程卷必须可以被源集群和目标集群访问。
虽然复制仓库没有出现在此图表中,但迁移需要它。
运行迁移计划,使用以下选项之一:
stage
在不停止应用程序的情况下将数据复制到目标集群。
阶段迁移可以多次运行,以便在迁移前将大多数数据复制到目标。运行一个或多个阶段迁移可缩短迁移的持续时间。
cutover
会停止源集群上的应用程序,并将资源移到目标集群。
可选:您可以清除
Halt transactions on the source cluster during migration
多选设置。
Migration Toolkit for Containers (MTC) 支持将数据从源集群迁移到目标集群的文件系统和快照数据复制方法。您可以选择适合于您的环境并受您的存储供应商支持的方法。
MTC 工具将数据文件从源集群复制到复制存储库,并从那里复制到目标集群。
文件系统复制方法使用 Restic 进行间接迁移,或使用 Rsync 进行直接卷迁移。
表 1.2. 文件系统复制方法概述
优点
|
限制
|
-
集群可以有不同的存储类。
所有 S3 存储供应商都支持。
使用 checksum 验证数据(可选)。
支持直接卷迁移,这会显著提高性能。
比快照复制方法慢。
可选的数据校验可能会显著降低性能。
Restic 和 Rsync PV 迁移假设支持的 PV 仅是
volumeMode=filesystem
。
不支持
在文件系统迁移中使用
volumeMode=Block
。
MTC 将源集群数据的快照复制到云供应商的复制仓库。数据在目标集群上恢复。
快照复制方法可用于 Amazon Web Services、Google Cloud Provider 和 Microsoft Azure。
表 1.3. 快照复制方法概述
优点
|
限制
|
-
比文件系统复制方法快。
云供应商必须支持快照。
集群必须位于相同的云供应商。
集群必须位于同一位置或区域。
集群必须具有相同的存储类。
存储类必须与快照兼容。
不支持直接卷迁移。
|
您可以使用直接镜像迁移(DIM)和直接卷迁移(DVM)将镜像和数据直接从源集群迁移到目标集群。
如果您使用位于不同可用区的节点运行 DVM,迁移可能会失败,因为迁移的 pod 无法访问持久性卷声明。
DIM 和 DVM 具有显著的性能优势,因为跳过将文件从源集群备份到复制存储库以及从复制存储库恢复到目标集群的中间步骤。使用
Rsync
传输数据。
DIM 和 DVM 还有其他先决条件。
第 2 章 Migration Toolkit for Containers 发行注记
该版本的 Migration Toolkit for Containers 发行注记介绍了新的功能和增强功能、已弃用的功能以及已知的问题。
MTC(Migration Toolkit for Containers)可让您按照命名空间将应用程序工作负载在不同 OpenShift Container Platform 集群间进行迁移。
您可以
从 OpenShift Container Platform 3 迁移到 4.15
,也可以在 OpenShift Container Platform 4 集群之间迁移。
MTC 提供了一个基于 Kubernetes 自定义资源的 web 控制台和 API,可帮助您控制迁移并最小化应用程序停机时间。
有关 MTC 支持政策的信息,请参阅
OpenShift Application and Cluster Migration Solutions
,它是
Red Hat OpenShift Container Platform 生命周期政策
的一部分。
2.1. Migration Toolkit for Containers 1.8.2 发行注记
2.2. Migration Toolkit for Containers 1.8.1 发行注记
2.3. Migration Toolkit for Containers 1.8 发行注记
此发行版本有以下技术更改:
从 OpenShift Container Platform 3 迁移到 OpenShift Container Platform 4 需要旧的 MTC Operator 和 MTC 1.7.x。
不支持从 MTC 1.7.x 迁移到 MTC 1.8.x。
您必须使用 MTC 1.7.x 来迁移使用 OpenShift Container Platform 4.9 或更早版本源的任何内容。
MTC 1.7.x 必须在源和目标中使用。
MTC 1.8.x 仅支持从 OpenShift Container Platform 4.10 或更高版本迁移到 OpenShift Container Platform 4.10 或更高版本。对于仅涉及集群版本 4.10 或更高版本的迁移,可以使用 1.7.x 或 1.8.x。但是,在源和目标上 MTC 1.Y.z 必须相同。
不支持从源 MTC 1.7.x 迁移到目标 MTC 1.8.x。
不支持从源 MTC 1.8.x 迁移到目标 MTC 1.7.x。
支持从源 MTC 1.7.x 迁移到目标 MTC 1.7.x。
支持从源 MTC 1.8.x 迁移到目标 MTC 1.8.x。
MTC 1.8.x 默认会安装 OADP 1.2.x。
从 MTC 1.7.x 升级到 MTC 1.8.0,需要手动将 OADP 频道改为 1.2。如果没有这样做,Operator 升级会失败。
2.4. Migration Toolkit for Containers 1.7.14 发行注记
2.5. Migration Toolkit for Containers 1.7.13 发行注记
2.6. Migration Toolkit for Containers 1.7.12 发行注记
2.7. Migration Toolkit for Containers 1.7.11 发行注记
2.8. Migration Toolkit for Containers 1.7.10 发行注记
2.9. Migration Toolkit for Containers 1.7.9 发行注记
2.10. Migration Toolkit for Containers 1.7.8 发行注记
2.11. Migration Toolkit for Containers 1.7.7 发行注记
2.12. Migration Toolkit for Containers 1.7.6 发行注记
2.13. Migration Toolkit for Containers 1.7.5 发行注记
2.14. Migration Toolkit for Containers 1.7.4 发行注记
2.15. Migration Toolkit for Containers 1.7.3 发行注记
2.16. Migration Toolkit for Containers 1.7.2 发行注记
2.17. Migration Toolkit for Containers 1.7.1 发行注记
2.18. Migration Toolkit for Containers 1.7 发行注记
此发行版本有以下新功能和增强:
Migration Toolkit for Containers(MTC)Operator 现在依赖于 OpenShift API for Data Protection(OADP)Operator。安装 MTC Operator 时,Operator Lifecycle Manager(OLM)会自动在同一命名空间中安装 OADP Operator。
您可以使用
crane tunnel-api
命令在两个集群间建立网络隧道,从位于防火墙后的源集群迁移到基于云的目标集群。
在 MTC web 控制台中转换存储类:您可以通过在同一集群中迁移持久性卷(PV)的存储类来转换它。
这个版本有以下已知问题:
当 AWS gp2 PVC 没有可用空间时,
MigPlan
自定义资源不会显示警告。(
BZ#1963927
)
如果目标存储是由 AWS Elastic 文件系统(EFS)动态置备的 PV,则直接和间接数据传输无法正常工作。这是因为 AWS EFS Container Storage Interface(CSI)驱动程序的限制。(
BZ#2085097
)
IBM Cloud 的块存储必须位于同一可用区中。请参阅
针对虚拟私有云块存储的 IBM 常见问题解答
。
MTC 1.7.6 无法将支持
v1beta1
cron 作业的源集群迁移到 OpenShift Container Platform 4.12 及更新的版本,不支持
v1beta1
cron 作业。(
BZ#2149119
)
此发行版本有以下新功能和增强:
状态迁移:您可以选择特定的持久性卷声明 (PVC) 来执行可重复的、仅限状态的迁移。
"new operator version available"通知:MTC web 控制台的 Clusters 页面在有新的 MTC Operator 可用时显示通知。
以下功能已弃用:
MTC 版本 1.4 不再被支持。
这个版本有以下已知问题:
在 OpenShift Container Platform 3.10 中,
MigrationController
pod 重启用时过长。Bugzilla 报告包含临时解决方案。(
BZ#1986796
)
在从 IBM Cloud 上的典型 OpenShift Container Platform 源集群直接迁移卷时,
Stage
pod 会失败。IBM 块存储插件不允许将同一卷挂载到同一节点的多个 pod。因此,PVC 无法同时挂载到 Rsync pod 和应用程序 pod 上。要解决这个问题,请在迁移前停止应用程序 pod。(
BZ#1887526
)
当 AWS gp2 PVC 没有可用空间时,
MigPlan
自定义资源不会显示警告。(
BZ#1963927
)
IBM Cloud 的块存储必须位于同一可用区中。请参阅
针对虚拟私有云块存储的 IBM 常见问题解答
。
2.20. Migration Toolkit for Containers 1.5 发行注记
此发行版本有以下新功能和增强:
Web 控制台的
Migration 详情
页面中的
Migration 资源
树通过用于监控和调试迁移的其他资源、Kubernetes 事件和实时状态信息进行了增强。
Web 控制台支持数百个迁移计划。
源命名空间可以在迁移计划中映射到不同的目标命名空间。在以前的版本中,源命名空间映射到名称相同的目标命名空间。
在迁移过程中,Web 控制台中会显示带有状态信息的 hook 阶段。
在直接卷迁移过程中,web 控制台中会显示 Rsync 重试尝试的数量。
可以为直接卷迁移启用持久性卷 (PV) 大小,以确保目标集群不会出现磁盘空间不足的问题。
触发 PV 重新定义大小的阈值可以配置。在以前的版本中,当磁盘用量超过 97% 时,PV 会重新定义大小。
Velero 已更新至 1.6 版本,它提供了大量修复和增强。
可以启用缓存的 Kubernetes 客户端来提高性能。
以下功能已弃用:
MTC 版本 1.2 和 1.3 不再被支持。
更新已弃用 API 的步骤已从文档的故障排除部分中删除,因为
oc convert
命令已弃用。
这个版本有以下已知问题:
如果您创建超过 400 个迁移计划,则 Microsoft Azure 存储不可用。
MigStorage
自定义资源显示以下消息:
The request is being throttled as the limit has been reached for operation type
。(
BZ#1977226
)
如果迁移失败,迁移计划不会为静默的 pod 保留自定义持久性卷 (PV) 设置。您必须手动回滚,删除迁移计划,并使用 PV 设置创建新的迁移计划。(
BZ#1784899
)
对于 AWS gp2 存储,PV 大小重新定义无法正常工作,除非
pv_resizing_threshold
为 42% 或更高。(
BZ#1973148
)
在以下情况下,PV 重新定义大小不适用于 OpenShift Container Platform 3.7 和 3.9 源集群:
应用程序是在安装 MTC 后安装的。
安装 MTC 后,应用程序 pod 会被重新调度到其他节点上。
OpenShift Container Platform 3.7 和 3.9 不支持 Mount Propagation 功能,它允许 Velero 在
Restic
pod 中自动挂载 PV。
MigAnalytic
自定义资源 (CR) 无法从
Restic
pod 收集 PV 数据,并将资源报告为
0
。
MigPlan
CR 显示类似如下的状态:
status:
conditions:
- category: Warn
lastTransitionTime: 2021-07-15T04:11:44Z
message: Failed gathering extended PV usage information for PVs [nginx-logs nginx-html], please see MigAnalytic openshift-migration/ocp-24706-basicvolmig-migplan-1626319591-szwd6 for details
reason: FailedRunningDf
status: "True"
type: ExtendedPVAnalysisFailed
要启用 PV 大小调整,您可以在源集群中手动重启 Restic daemonset,或者在与应用程序相同的节点上重启
Restic
pod。如果没有重启 Restic,在没有调整 PV 的情况下运行直接卷迁移。(
BZ#1982729
)
此发行版本有以下技术更改:
旧的 MTC Operator 版本 1.5.1 在 OpenShift Container Platform 版本 3.7 到 4.5 中手动安装。
Migration Toolkit for Containers Operator 版本 1.5.1 在 OpenShift Container Platform 版本 4.6 及更新的版本中使用 Operator Lifecycle Manager 安装。
您可以在 OpenShift Container Platform 4 上安装 MTC。
要在 OpenShift Container Platform 3 上安装 MTC ,请参阅
在 OpenShift Container Platform 3 上安装旧的 MTC
。
默认情况下,MTC web 控制台和
Migration Controller
pod 在目标集群中运行。您可以配置
Migration Controller
自定义资源清单在
远程集群
中运行 MTC web 控制台和
Migration Controller
pod。
安装 MTC 后,您必须配置对象存储以用作复制存储库。
要卸载 MTC,请参阅
卸载 MTC 并删除资源
。
您必须安装与 OpenShift Container Platform 版本兼容的 MTC。
定义
-
旧平台
-
OpenShift Container Platform 4.5 及更早版本。
OpenShift Container Platform 4.6 及更新的版本。
-
旧 Operator
-
针对传统平台设计的 MTC Operator。
-
现代 operator
-
针对现代平台设计的 MTC Operator。
运行 MTC 控制器和 GUI 的集群。
运行 Velero 的迁移的源或目标集群。Control Cluster 通过 Velero API 与远程集群通信,以驱动迁移。
您必须使用兼容的 MTC 版本来迁移 OpenShift Container Platform 集群。要使迁移成功源集群和目标集群,必须使用相同的 MTC 版本。
MTC 1.7 支持从 OpenShift Container Platform 3.11 迁移到 4.8。
MTC 1.8 仅支持从 OpenShift Container Platform 4.9 及之后的版本进行迁移。
表 3.1. MTC 兼容性:从传统或现代平台迁移
详情
|
OpenShift Container Platform 3.11
|
OpenShift Container Platform 4.0 到 4.5
|
OpenShift Container Platform 4.6 到 4.8
|
OpenShift Container Platform 4.9 或更高版本
|
稳定 MTC 版本
MTC v.1.7.
z
MTC v.1.7.
z
MTC v.1.7.
z
MTC v.1.8.
z
旧版 MTC v.1.7.
z
operator:使用
operator.yml
文件手动安装。
[
重要信息
] 此集群不能是控制集群。
使用 OLM 安装,发行频道
release-v1.7
使用 OLM 安装,发行频道
release-v1.8
在某些情况下,网络的限制可能会阻止现代集群连接到迁移中需要涉及的其他集群。例如,当从内部的 OpenShift Container Platform 3.11 集群迁移到云环境中的现代 OpenShift Container Platform 集群时,,现代集群无法连接到 OpenShift Container Platform 3.11 集群。
在 MTC v.1.7.
z
中,如果其中一个远程集群因为网络限制而无法与控制集群通信,请使用
crane tunnel-api
命令。
对于稳定(stable)的 MTC 发行版本,虽然您应该始终将最现代化的集群指定为控制集群,但是在这种情况下,可能需要将旧的集群指定为控制集群,并将工作负载推送到远程集群。
3.2. 在 OpenShift Container Platform 4.2 到 4.5 上安装旧的 MTC Operator
您可以在 OpenShift Container Platform 版本 4.2 到 4.5 中手动安装旧的 MTC Operator。
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
您必须有权访问
registry.redhat.io
。
必须安装
podman
。
使用您的红帽客户门户网站账户登陆到
registry.redhat.io
:
$ podman login registry.redhat.io
-
输入以下命令下载
operator.yml
文件:
podman cp $(podman create registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator:v1.7):/operator.yml ./
-
输入以下命令下载
controller.yml
文件:
podman cp $(podman create registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator:v1.7):/controller.yml ./
-
登录您的 OpenShift Container Platform 源集群。
验证集群可以在
registry.redhat.io
中进行身份验证:
$ oc run test --image registry.redhat.io/ubi9 --command sleep infinity
-
创建 MTC Operator 对象的 Migration Toolkit:
$ oc create -f operator.yml
-
验证 MTC Pod 是否正在运行:
$ oc get pods -n openshift-migration
3.3. 在 OpenShift Container Platform 4.15 上安装 MTC Operator
您可以使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4.15 上安装 MTC Operator。
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
在 OpenShift Container Platform Web 控制台中,点击
Operators
→
OperatorHub
。
使用
Filter by keyword
字段查找
MTCs Operator
。
选择
Migration Toolkit for Containers Operator
并点
Install
。
点击
Install
。
在
Installed Operators
页中,
openshift-migration
项目中会出现状态为
Succeeded
的
Migration Toolkit for Containers Operator
。
点
Migration Toolkit for Containers Operator
。
在
Provided APIs
下,找到
Migration Controller
标题,再点
Create Instance
。
点击
Create
。
点
Workloads
→
Pods
来验证 MTC pod 正在运行 。
对于 OpenShift Container Platform 4.1 及更早的版本,您必须在安装 Migration Toolkit for Containers Operator 后,在
MigrationController
自定义资源 (CR) 清单中配置代理,因为这些版本不支持集群范围的
proxy
对象。
对于 OpenShift Container Platform 4.2 到 4.15,Migration Toolkit for Containers (MTC) 会继承集群范围的代理设置。如果要覆盖集群范围的代理设置,可以更改代理参数。
MTC 1.4.2 中引入了直接卷迁移(DVM)。DVM 只支持一个代理。如果目标集群也位于代理后面,则源集群无法访问目标集群的路由。
如果要从代理后面的源集群执行 DVM,您必须配置一个 TCP 代理,该代理可在传输层进行透明处理,并在不使用自己的 SSL 证书的情况下转发 SSL 连接。Stunnel 代理是此类代理的示例。
您可以通过 TCP 代理在源和目标集群之间设置直接连接,并在
MigrationController
CR 中配置
stunnel_tcp_proxy
变量来使用代理:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
stunnel_tcp_proxy: http://username:password@ip:port
直接卷迁移(DVM)只支持代理的基本身份验证。此外,DVM 仅适用于可透明地传输 TCP 连接的代理。在 man-in-the-middle 模式中的 HTTP/HTTPS 代理无法正常工作。现有的集群范围的代理可能不支持此行为。因此,DVM 的代理设置意与 MTC 中常见的代理配置不同。
3.4.1.2. 为什么使用 TCP 代理而不是 HTTP/HTTPS 代理?
您可以通过 OpenShift 路由在源和目标集群之间运行 Rsync 来启用 DVM。流量通过 TCP 代理(Stunnel)加密。在源集群上运行的 Stunnel 会启动与目标 Stunnel 的 TLS 连接,并通过加密频道来传输数据。
OpenShift 中的集群范围 HTTP/HTTPS 代理通常在 man-in-the-middle 模式进行配置,其中它们将自己的 TLS 会话与外部服务器协商。但是,这不适用于 Stunnel。Stunnel 要求代理不处理它的 TLS 会话,基本上使代理成为一个透明的隧道,只需按原样转发 TCP 连接。因此,您必须使用 TCP 代理。
OpenShift 支持根据集群使用的网络插件,限制使用
NetworkPolicy
或
EgressFirewalls
的流量。如果任何涉及迁移的源命名空间使用此类机制将网络流量限制到 pod,限制可能会在迁移过程中停止到 Rsync pod 的流量。
在源和目标集群上运行的 rsync pod 必须通过 OpenShift Route 相互连接。可将现有的
NetworkPolicy
或
EgressNetworkPolicy
对象配置为从这些流量限制自动排除 Rsync pod。
3.4.2.1. NetworkPolicy 配置
3.4.2.1.1. 来自 Rsync pod 的出口流量
如果源或目标命名空间中的
NetworkPolicy
配置阻止这种类型的流量,您可以使用 Rsync pod 的唯一标签来允许出口流量从它们传递。以下策略允许来自命名空间中 Rsync pod 的
所有
出口流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress-from-rsync-pods
spec:
podSelector:
matchLabels:
owner: directvolumemigration
app: directvolumemigration-rsync-transfer
egress:
policyTypes:
- Egress
3.4.2.1.2. 到 Rsync pod 的入口流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress-from-rsync-pods
spec:
podSelector:
matchLabels:
owner: directvolumemigration
app: directvolumemigration-rsync-transfer
ingress:
policyTypes:
- Ingress
3.4.2.2. EgressNetworkPolicy 配置
EgressNetworkPolicy
对象或
Egress Firewalls
是 OpenShift 构造,用于阻止离开集群的出口流量。
与
NetworkPolicy
对象不同,egress Firewall 在项目级别工作,因为它适用于命名空间中的所有 pod。因此,Rsync pod 的唯一标签不会使只有 Rsync pod 的 Rsync pod 冲突。但是,您可以将源集群或目标集群的 CIDR 范围添加到策略的
Allow
规则中,以便可以在两个集群之间设置直接连接。
根据存在 Egress Firewall 的集群,您可以添加其他集群的 CIDR 范围来允许两者间的出口流量:
apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
name: test-egress-policy
namespace: <namespace>
spec:
egress:
- to:
cidrSelector: <cidr_of_source_or_target_cluster>
type: Deny
默认情况下,DVM 使用 OpenShift Container Platform 路由作为端点,将 PV 数据传送到目标集群。如果集群拓扑允许,您可以选择其他类型的支持的端点。
对于每个集群,您可以通过在
MigrationController
CR 中适当的
目标
集群上设置
rsync_endpoint_type
变量来配置端点:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
rsync_endpoint_type: [NodePort|ClusterIP|Route]
3.4.2.4. 为 Rsync pod 配置补充组
当 PVC 使用共享存储时,您可以通过将 supplemental 组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:
表 3.2. Rsync pod 的附加组群
变量
|
类型
|
Default(默认)
|
描述
|
src_supplemental_groups
string
用于源 Rsync pod 的以逗号分隔的补充组列表
target_supplemental_groups
string
目标 Rsync pod 的,以逗号分隔的补充组列表
可以更新
MigrationController
CR,以便为这些补充组设置值:
spec:
src_supplemental_groups: "1000,2000"
target_supplemental_groups: "2000,3000"
先决条件
-
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
获取
MigrationController
CR 清单:
$ oc get migrationcontroller <migration_controller> -n openshift-migration
-
更新代理参数:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: <migration_controller>
namespace: openshift-migration
spec:
stunnel_tcp_proxy: http://<username>:<password>@<ip>:<port> 1
noProxy: example.com 2
-
1
-
用于直接卷迁移的 stunnel 代理 URL。
要排除代理的目标域名、域、IP 地址或其他网络 CIDR 的逗号分隔列表。
在域前面加
.
来仅匹配子域。例如:
.y.com
匹配
x.y.com
,但不匹配
y.com
。使用
*
可对所有目的地绕过所有代理。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr
字段定义的 worker,您必须将它们添加到此列表中,以防止连接问题。
如果未设置
httpProxy
和
httpsProxy
字段,则此字段将被忽略。
将清单保存为
migration-controller.yaml
。
应用更新的清单:
$ oc replace -f migration-controller.yaml -n openshift-migration
如需更多信息,请参阅
配置集群范围代理
。
3.4.4. 以 root 或非 root 身份运行 Rsync
本节仅在使用 OpenShift API 而不是 Web 控制台时应用。
OpenShift 环境默认启用
PodSecurityAdmission
控制器。此控制器要求集群管理员通过命名空间标签强制实施 Pod 安全标准。集群中的所有工作负载都应该运行以下 Pod 安全标准级别之一:
Privileged
、
Baseline
或
Restricted
。每个集群都有自己的默认策略集。
为了保证在所有环境中成功进行数据传输,MTC 1.7.5 引入了 Rsync pod 中的更改,包括默认以非 root 用户身份运行 Rsync pod。这样可确保即使不一定需要更高特权的工作负载也可以进行数据传输。这个更改是进行的,因为它最适合运行具有最低级别权限的工作负载。
3.4.4.1. 为数据 trannsfer 手动覆盖默认非 root 操作
虽然在大多数情况下,以非 root 用户身份运行 Rsync pod 可以正常工作,但当您以 root 用户身份在源端运行工作负载时,数据传输可能会失败。MTC 提供了为数据传输手动覆盖默认非 root 操作的方法:
将所有迁移配置为作为 root 在目标集群上针对所有迁移运行 Rsync pod。
对于每个迁移,在目标集群上以 root 用户身份运行 Rsync pod。
在这两种情况下,您必须在迁移前运行具有较高权限的工作负载的命名空间源上设置以下标签:
enforce
、
audit
和
warn。
要了解更多有关标签的 Pod Security Admission 和设置值的信息,请参阅
控制 pod 安全准入同步
。
3.4.4.2. 将所有迁移的 MigrationController CR 配置为 root 或非 root
默认情况下,Rsync 作为非 root 运行。
在目标集群中,您可以将
MigrationController
CR 配置为以 root 用户身份运行 Rsync。
配置
MigrationController
CR,如下所示:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
migration_rsync_privileged: true
此配置将适用于所有将来的迁移。
3.4.4.3. 将 MigMigration CR 配置为每个迁移的根或非 root
在目标集群中,您可以使用以下非 root 选项将
MigMigration
CR 配置为以 root 或非 root 身份运行 Rsync:
作为特定用户 ID (UID)
作为一个特定组 ID (GID)
要以 root 用户身份运行 Rsync,请根据本例配置
MigMigration
CR:
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
runAsRoot: true
-
要将 Rsync 作为特定用户 ID (UID)或特定组 ID (GID)运行,请根据本例配置
MigMigration
CR:
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
runAsUser: 10010001
runAsGroup: 3
您必须将对象存储配置为用作复制存储库。MTC 将数据从源集群复制到复制存储库,然后从复制存储库复制到目标集群。
MTC 支持
使用文件系统和快照数据复制的方法
将数据从源集群迁移到目标集群。您可以选择适合于您的环境并受您的存储供应商支持的方法。
MTC 支持以下存储供应商:
多云对象网关
Amazon Web Services S3
Google Cloud Platform
Microsoft Azure Blob
通用 S3 对象存储,例如 Minio 或 Ceph S3
-
所有集群都必须具有对复制存储库的不间断网络访问权限。
如果您将代理服务器与内部托管的复制存储库搭配使用,您必须确保代理允许访问复制存储库。
您必须检索 Multicloud Object Gateway(MCG)凭证和 S3 端点,以便将 MCG 配置为 MTC 的 Migration Toolkit for Containers(MTC)的复制仓库。您必须检索 Multicloud Object Gateway(MCG)凭证,以便为 OpenShift API 创建用于数据保护(OADP)的
Secret
自定义资源(CR)。
MCG 是 OpenShift Data Foundation 的一个组件。
请根据相关的
OpenShift Data Foundation 部署指南
部署 OpenShift Data Foundation。
通过对
NooBaa
自定义资源运行
describe
命令,获取 S3 端点、
AWS_ACCESS_KEY_ID
和
AWS_SECRET_ACCESS_KEY
。
您可以使用这些凭证将 MCG 作为复制存储库来添加。
3.5.3. 配置 Amazon Web Services
您可以将 Amazon Web Services(AWS)S3 对象存储配置为 MTC 的 Migration Toolkit for Containers(MTC)的复制仓库。
已安装
AWS CLI
。
AWS S3 存储桶必须可以被源和目标集群访问。
如果您使用快照复制方法:
您必须有权访问 EC2 Elastic Block Storage (EBS)。
源和目标集群必须位于同一区域。
源和目标集群必须具有相同的存储类。
存储类必须与快照兼容。
设置
BUCKET
变量:
$ BUCKET=<your_bucket>
-
设置
REGION
变量:
$ REGION=<your_region>
-
创建 AWS S3 存储桶:
$ aws s3api create-bucket \
--bucket $BUCKET \
--region $REGION \
--create-bucket-configuration LocationConstraint=$REGION 1
-
1
-
us-east-1
不支持
LocationConstraint
。如果您的区域是
us-east-1
,忽略
--create-bucket-configuration LocationConstraint=$REGION
。
创建一个 IAM 用户:
$ aws iam create-user --user-name velero 1
-
1
-
如果要使用 Velero 备份具有多个 S3 存储桶的集群,请为每个集群创建一个唯一用户名。
创建
velero-policy.json
文件:
$ cat > velero-policy.json <<EOF
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"ec2:DescribeVolumes",
"ec2:DescribeSnapshots",
"ec2:CreateTags",
"ec2:CreateVolume",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot"
"Resource": "*"
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:ListMultipartUploadParts"
"Resource": [
"arn:aws:s3:::${BUCKET}/*"
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListBucketMultipartUploads"
"Resource": [
"arn:aws:s3:::${BUCKET}"
附加策略,为 velero 用户提供所需的最低权限:
$ aws iam put-user-policy \
--user-name velero \
--policy-name velero \
--policy-document file://velero-policy.json
-
为
velero
用户创建访问密钥:
$ aws iam create-access-key --user-name velero
3.5.4. 配置 Google Cloud Platform
您可以将 Google Cloud Platform(GCP)存储桶配置为 Migration Toolkit for Containers(MTC)的复制仓库。
您必须安装了
gcloud
和
gsutil
CLI 工具。详情请查看
Google 云文档
。
GCP 存储桶必须可以被源和目标集群访问。
如果您使用快照复制方法:
源和目标集群必须位于同一区域。
源和目标集群必须具有相同的存储类。
存储类必须与快照兼容。
登录到 GCP:
$ gcloud auth login
-
设置
BUCKET
变量:
$ BUCKET=<bucket> 1
-
1
-
指定存储桶名称。
创建存储桶:
$ gsutil mb gs://$BUCKET/
-
将
PROJECT_ID
变量设置为您的活跃项目:
$ PROJECT_ID=$(gcloud config get-value project)
-
创建服务帐户:
$ gcloud iam service-accounts create velero \
--display-name "Velero service account"
-
列出服务帐户:
$ gcloud iam service-accounts list
-
设置
SERVICE_ACCOUNT_EMAIL
变量,使其与
email
值匹配:
$ SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \
--filter="displayName:Velero service account" \
--format 'value(email)')
-
附加策略,为
velero
用户提供所需的最低权限:
$ ROLE_PERMISSIONS=(
compute.disks.get
compute.disks.create
compute.disks.createSnapshot
compute.snapshots.get
compute.snapshots.create
compute.snapshots.useReadOnly
compute.snapshots.delete
compute.zones.get
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.list
iam.serviceAccounts.signBlob
创建 velero.server 自定义角色:
$ gcloud iam roles create velero.server \
--project $PROJECT_ID \
--title "Velero Server" \
--permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"
-
为项目添加 IAM 策略绑定:
$ gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_EMAIL \
--role projects/$PROJECT_ID/roles/velero.server
-
更新 IAM 服务帐户:
$ gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}
-
将 IAM 服务帐户的密钥保存到当前目录中的
credentials-velero
文件中:
$ gcloud iam service-accounts keys create credentials-velero \
--iam-account $SERVICE_ACCOUNT_EMAIL
您可以使用
credentials-velero
文件将 GCP 添加为复制存储库。
3.5.5. 配置 Microsoft Azure
您可以将 Microsoft Azure Blob 存储容器配置为 Migration Toolkit for Containers(MTC)的复制仓库。
已安装
Azure CLI
。
Azure Blob 存储容器必须可以被源和目标集群访问。
如果您使用快照复制方法:
源和目标集群必须位于同一区域。
源和目标集群必须具有相同的存储类。
存储类必须与快照兼容。
登录到 Azure:
$ az login
-
设置
AZURE_RESOURCE_GROUP
变量:
$ AZURE_RESOURCE_GROUP=Velero_Backups
-
创建 Azure 资源组:
$ az group create -n $AZURE_RESOURCE_GROUP --location CentralUS 1
-
1
-
指定位置。
设置
AZURE_STORAGE_ACCOUNT_ID
变量:
$ AZURE_STORAGE_ACCOUNT_ID="velero$(uuidgen | cut -d '-' -f5 | tr '[A-Z]' '[a-z]')"
-
创建 Azure 存储帐户:
$ az storage account create \
--name $AZURE_STORAGE_ACCOUNT_ID \
--resource-group $AZURE_RESOURCE_GROUP \
--sku Standard_GRS \
--encryption-services blob \
--https-only true \
--kind BlobStorage \
--access-tier Hot
-
设置
BLOB_CONTAINER
变量:
$ BLOB_CONTAINER=velero
-
创建 Azure Blob 存储容器:
$ az storage container create \
-n $BLOB_CONTAINER \
--public-access off \
--account-name $AZURE_STORAGE_ACCOUNT_ID
-
为
velero
创建服务主体和凭证:
$ AZURE_SUBSCRIPTION_ID=`az account list --query '[?isDefault].id' -o tsv` \
AZURE_TENANT_ID=`az account list --query '[?isDefault].tenantId' -o tsv` \
AZURE_CLIENT_SECRET=`az ad sp create-for-rbac --name "velero" \
--role "Contributor" --query 'password' -o tsv` \
AZURE_CLIENT_ID=`az ad sp list --display-name "velero" \
--query '[0].appId' -o tsv`
-
在
credentials-velero
文件中保存服务主体的凭证:
$ cat << EOF > ./credentials-velero
AZURE_SUBSCRIPTION_ID=${AZURE_SUBSCRIPTION_ID}
AZURE_TENANT_ID=${AZURE_TENANT_ID}
AZURE_CLIENT_ID=${AZURE_CLIENT_ID}
AZURE_CLIENT_SECRET=${AZURE_CLIENT_SECRET}
AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP}
AZURE_CLOUD_NAME=AzurePublicCloud
您可以使用 credentials-velero 文件将 Azure 添加为复制存储库。
您可以卸载 MTC,并删除其资源来清理集群。
删除
velero
CRD 会从集群中移除 Velero。
您必须以具有
cluster-admin
权限的用户身份登录。
删除所有集群中的
MigrationController
自定义资源 (CR):
$ oc delete migrationcontroller <migration_controller>
-
使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4 上卸载 MTC Operator。
运行以下命令,删除所有集群中的集群范围资源:
migration
自定义资源定义 (CRDs):
$ oc delete $(oc get crds -o name | grep 'migration.openshift.io')
-
Velero
CRD:
$ oc delete $(oc get crds -o name | grep 'velero')
-
migration
集群角色:
$ oc delete $(oc get clusterroles -o name | grep 'migration.openshift.io')
-
migration-operator
集群角色:
$ oc delete clusterrole migration-operator
-
velero
集群角色:
$ oc delete $(oc get clusterroles -o name | grep 'velero')
-
migration
集群角色绑定:
$ oc delete $(oc get clusterrolebindings -o name | grep 'migration.openshift.io')
-
migration-operator
集群角色绑定:
$ oc delete clusterrolebindings migration-operator
-
velero
集群角色绑定:
$ oc delete $(oc get clusterrolebindings -o name | grep 'velero')
您可以通过执行以下步骤在受限网络环境中的 OpenShift Container Platform 4 上安装 MTC:
创建一个
镜像的 Operator 目录
。
此过程会创建一个
mapping.txt
文件,其中包含
registry.redhat.io
镜像和您的镜像 registry 镜像之间的映射。
mapping.txt
文件是在 OpenShift Container Platform 4.2 到 4.5 源集群中安装
旧的
MTC Operator 所需要的。
使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4.15 目标集群上安装 MTC。
默认情况下,MTC web 控制台和
Migration Controller
pod 在目标集群中运行。您可以配置
Migration Controller
自定义资源清单在
远程集群
中运行 MTC web 控制台和
Migration Controller
pod。
在源集群中安装 MTC Operator:
OpenShift Container Platform 4.6 或更高版本: 使用 Operator Lifecycle Manager 安装 MTC Operator。
OpenShift Container Platform 4.2 到 4.5: 使用命令行界面安装传统的 MTC Operator。
配置对象存储,以用作复制存储库。
要在 OpenShift Container Platform 3 上安装 MTC ,请参阅
在 OpenShift Container Platform 3 上安装旧的 MTC
。
要卸载 MTC,请参阅
卸载 MTC 并删除资源
。
您必须安装与 OpenShift Container Platform 版本兼容的 MTC。
定义
-
旧平台
-
OpenShift Container Platform 4.5 及更早版本。
OpenShift Container Platform 4.6 及更新的版本。
-
旧 Operator
-
针对传统平台设计的 MTC Operator。
-
现代 operator
-
针对现代平台设计的 MTC Operator。
运行 MTC 控制器和 GUI 的集群。
运行 Velero 的迁移的源或目标集群。Control Cluster 通过 Velero API 与远程集群通信,以驱动迁移。
您必须使用兼容的 MTC 版本来迁移 OpenShift Container Platform 集群。要使迁移成功源集群和目标集群,必须使用相同的 MTC 版本。
MTC 1.7 支持从 OpenShift Container Platform 3.11 迁移到 4.8。
MTC 1.8 仅支持从 OpenShift Container Platform 4.9 及之后的版本进行迁移。
表 4.1. MTC 兼容性:从传统或现代平台迁移
详情
|
OpenShift Container Platform 3.11
|
OpenShift Container Platform 4.0 到 4.5
|
OpenShift Container Platform 4.6 到 4.8
|
OpenShift Container Platform 4.9 或更高版本
|
稳定 MTC 版本
MTC v.1.7.
z
MTC v.1.7.
z
MTC v.1.7.
z
MTC v.1.8.
z
旧版 MTC v.1.7.
z
operator:使用
operator.yml
文件手动安装。
[
重要信息
] 此集群不能是控制集群。
使用 OLM 安装,发行频道
release-v1.7
使用 OLM 安装,发行频道
release-v1.8
在某些情况下,网络的限制可能会阻止现代集群连接到迁移中需要涉及的其他集群。例如,当从内部的 OpenShift Container Platform 3.11 集群迁移到云环境中的现代 OpenShift Container Platform 集群时,,现代集群无法连接到 OpenShift Container Platform 3.11 集群。
在 MTC v.1.7.
z
中,如果其中一个远程集群因为网络限制而无法与控制集群通信,请使用
crane tunnel-api
命令。
对于稳定(stable)的 MTC 发行版本,虽然您应该始终将最现代化的集群指定为控制集群,但是在这种情况下,可能需要将旧的集群指定为控制集群,并将工作负载推送到远程集群。
4.2. 在 OpenShift Container Platform 4.15 上安装 MTC Operator
您可以使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4.15 上安装 MTC Operator。
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
您必须从本地 registry 中的镜像创建 Operator 目录。
在 OpenShift Container Platform Web 控制台中,点击
Operators
→
OperatorHub
。
使用
Filter by keyword
字段查找
MTCs Operator
。
选择
Migration Toolkit for Containers Operator
并点
Install
。
点击
Install
。
在
Installed Operators
页中,
openshift-migration
项目中会出现状态为
Succeeded
的
Migration Toolkit for Containers Operator
。
点
Migration Toolkit for Containers Operator
。
在
Provided APIs
下,找到
Migration Controller
标题,再点
Create Instance
。
点击
Create
。
点
Workloads
→
Pods
来验证 MTC pod 正在运行 。
4.3. 在 OpenShift Container Platform 4.2 到 4.5 上安装旧的 MTC Operator
您可以在 OpenShift Container Platform 版本 4.2 到 4.5 中手动安装旧的 MTC Operator。
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
您必须有权访问
registry.redhat.io
。
必须安装
podman
。
您必须有一个有网络访问权限的 Linux 工作站才能从
registry.redhat.io
下载文件。
您必须创建 Operator 目录的镜像镜像。
您需要通过镜像的 Operator 目录在 OpenShift Container Platform 4.15 上安装 Migration Toolkit for Containers Operator。
使用您的红帽客户门户网站账户登陆到
registry.redhat.io
:
$ podman login registry.redhat.io
-
输入以下命令下载
operator.yml
文件:
podman cp $(podman create registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator:v1.7):/operator.yml ./
-
输入以下命令下载
controller.yml
文件:
podman cp $(podman create registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator:v1.7):/controller.yml ./
-
运行以下命令来获取 Operator 镜像映射:
$ grep openshift-migration-legacy-rhel8-operator ./mapping.txt | grep rhmtc
mapping.txt
文件是在对 Operator 目录进行镜像时创建的。输出显示了
registry.redhat.io
镜像和您的镜像 registry 镜像之间的映射。
registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator@sha256:468a6126f73b1ee12085ca53a312d1f96ef5a2ca03442bcb63724af5e2614e8a=<registry.apps.example.com>/rhmtc/openshift-migration-legacy-rhel8-operator
在
operator.yml
文件中,为
ansible
和
operator
容器更新
image
值,并更新
REGISTRY
值:
containers:
- name: ansible
image: <registry.apps.example.com>/rhmtc/openshift-migration-legacy-rhel8-operator@sha256:<468a6126f73b1ee12085ca53a312d1f96ef5a2ca03442bcb63724af5e2614e8a> 1
- name: operator
image: <registry.apps.example.com>/rhmtc/openshift-migration-legacy-rhel8-operator@sha256:<468a6126f73b1ee12085ca53a312d1f96ef5a2ca03442bcb63724af5e2614e8a> 2
- name: REGISTRY
value: <registry.apps.example.com> 3
-
1
2
-
指定您的镜像 registry 和 Operator 镜像的
sha256
值。
指定您的镜像 registry。
登录您的 OpenShift Container Platform 源集群。
创建 MTC Operator 对象的 Migration Toolkit:
$ oc create -f operator.yml
-
验证 MTC Pod 是否正在运行:
$ oc get pods -n openshift-migration
对于 OpenShift Container Platform 4.1 及更早的版本,您必须在安装 Migration Toolkit for Containers Operator 后,在
MigrationController
自定义资源 (CR) 清单中配置代理,因为这些版本不支持集群范围的
proxy
对象。
对于 OpenShift Container Platform 4.2 到 4.15,Migration Toolkit for Containers (MTC) 会继承集群范围的代理设置。如果要覆盖集群范围的代理设置,可以更改代理参数。
MTC 1.4.2 中引入了直接卷迁移(DVM)。DVM 只支持一个代理。如果目标集群也位于代理后面,则源集群无法访问目标集群的路由。
如果要从代理后面的源集群执行 DVM,您必须配置一个 TCP 代理,该代理可在传输层进行透明处理,并在不使用自己的 SSL 证书的情况下转发 SSL 连接。Stunnel 代理是此类代理的示例。
您可以通过 TCP 代理在源和目标集群之间设置直接连接,并在
MigrationController
CR 中配置
stunnel_tcp_proxy
变量来使用代理:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
stunnel_tcp_proxy: http://username:password@ip:port
直接卷迁移(DVM)只支持代理的基本身份验证。此外,DVM 仅适用于可透明地传输 TCP 连接的代理。在 man-in-the-middle 模式中的 HTTP/HTTPS 代理无法正常工作。现有的集群范围的代理可能不支持此行为。因此,DVM 的代理设置意与 MTC 中常见的代理配置不同。
4.4.1.2. 为什么使用 TCP 代理而不是 HTTP/HTTPS 代理?
您可以通过 OpenShift 路由在源和目标集群之间运行 Rsync 来启用 DVM。流量通过 TCP 代理(Stunnel)加密。在源集群上运行的 Stunnel 会启动与目标 Stunnel 的 TLS 连接,并通过加密频道来传输数据。
OpenShift 中的集群范围 HTTP/HTTPS 代理通常在 man-in-the-middle 模式进行配置,其中它们将自己的 TLS 会话与外部服务器协商。但是,这不适用于 Stunnel。Stunnel 要求代理不处理它的 TLS 会话,基本上使代理成为一个透明的隧道,只需按原样转发 TCP 连接。因此,您必须使用 TCP 代理。
OpenShift 支持根据集群使用的网络插件,限制使用
NetworkPolicy
或
EgressFirewalls
的流量。如果任何涉及迁移的源命名空间使用此类机制将网络流量限制到 pod,限制可能会在迁移过程中停止到 Rsync pod 的流量。
在源和目标集群上运行的 rsync pod 必须通过 OpenShift Route 相互连接。可将现有的
NetworkPolicy
或
EgressNetworkPolicy
对象配置为从这些流量限制自动排除 Rsync pod。
4.4.2.1. NetworkPolicy 配置
4.4.2.1.1. 来自 Rsync pod 的出口流量
如果源或目标命名空间中的
NetworkPolicy
配置阻止这种类型的流量,您可以使用 Rsync pod 的唯一标签来允许出口流量从它们传递。以下策略允许来自命名空间中 Rsync pod 的
所有
出口流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress-from-rsync-pods
spec:
podSelector:
matchLabels:
owner: directvolumemigration
app: directvolumemigration-rsync-transfer
egress:
policyTypes:
- Egress
4.4.2.1.2. 到 Rsync pod 的入口流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress-from-rsync-pods
spec:
podSelector:
matchLabels:
owner: directvolumemigration
app: directvolumemigration-rsync-transfer
ingress:
policyTypes:
- Ingress
4.4.2.2. EgressNetworkPolicy 配置
EgressNetworkPolicy
对象或
Egress Firewalls
是 OpenShift 构造,用于阻止离开集群的出口流量。
与
NetworkPolicy
对象不同,egress Firewall 在项目级别工作,因为它适用于命名空间中的所有 pod。因此,Rsync pod 的唯一标签不会使只有 Rsync pod 的 Rsync pod 冲突。但是,您可以将源集群或目标集群的 CIDR 范围添加到策略的
Allow
规则中,以便可以在两个集群之间设置直接连接。
根据存在 Egress Firewall 的集群,您可以添加其他集群的 CIDR 范围来允许两者间的出口流量:
apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
name: test-egress-policy
namespace: <namespace>
spec:
egress:
- to:
cidrSelector: <cidr_of_source_or_target_cluster>
type: Deny
默认情况下,DVM 使用 OpenShift Container Platform 路由作为端点,将 PV 数据传送到目标集群。如果集群拓扑允许,您可以选择其他类型的支持的端点。
对于每个集群,您可以通过在
MigrationController
CR 中适当的
目标
集群上设置
rsync_endpoint_type
变量来配置端点:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
rsync_endpoint_type: [NodePort|ClusterIP|Route]
4.4.2.4. 为 Rsync pod 配置补充组
当 PVC 使用共享存储时,您可以通过将 supplemental 组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:
表 4.2. Rsync pod 的附加组群
变量
|
类型
|
Default(默认)
|
描述
|
src_supplemental_groups
string
用于源 Rsync pod 的以逗号分隔的补充组列表
target_supplemental_groups
string
目标 Rsync pod 的,以逗号分隔的补充组列表
可以更新
MigrationController
CR,以便为这些补充组设置值:
spec:
src_supplemental_groups: "1000,2000"
target_supplemental_groups: "2000,3000"
先决条件
-
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
获取
MigrationController
CR 清单:
$ oc get migrationcontroller <migration_controller> -n openshift-migration
-
更新代理参数:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: <migration_controller>
namespace: openshift-migration
spec:
stunnel_tcp_proxy: http://<username>:<password>@<ip>:<port> 1
noProxy: example.com 2
-
1
-
用于直接卷迁移的 stunnel 代理 URL。
要排除代理的目标域名、域、IP 地址或其他网络 CIDR 的逗号分隔列表。
在域前面加
.
来仅匹配子域。例如:
.y.com
匹配
x.y.com
,但不匹配
y.com
。使用
*
可对所有目的地绕过所有代理。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr
字段定义的 worker,您必须将它们添加到此列表中,以防止连接问题。
如果未设置
httpProxy
和
httpsProxy
字段,则此字段将被忽略。
将清单保存为
migration-controller.yaml
。
应用更新的清单:
$ oc replace -f migration-controller.yaml -n openshift-migration
如需更多信息,请参阅
配置集群范围代理
。
4.5. 以 root 或非 root 身份运行 Rsync
本节仅在使用 OpenShift API 而不是 Web 控制台时应用。
OpenShift 环境默认启用
PodSecurityAdmission
控制器。此控制器要求集群管理员通过命名空间标签强制实施 Pod 安全标准。集群中的所有工作负载都应该运行以下 Pod 安全标准级别之一:
Privileged
、
Baseline
或
Restricted
。每个集群都有自己的默认策略集。
为了保证在所有环境中成功进行数据传输,MTC 1.7.5 引入了 Rsync pod 中的更改,包括默认以非 root 用户身份运行 Rsync pod。这样可确保即使不一定需要更高特权的工作负载也可以进行数据传输。这个更改是进行的,因为它最适合运行具有最低级别权限的工作负载。
为数据 trannsfer 手动覆盖默认非 root 操作
虽然在大多数情况下,以非 root 用户身份运行 Rsync pod 可以正常工作,但当您以 root 用户身份在源端运行工作负载时,数据传输可能会失败。MTC 提供了为数据传输手动覆盖默认非 root 操作的方法:
将所有迁移配置为作为 root 在目标集群上针对所有迁移运行 Rsync pod。
对于每个迁移,在目标集群上以 root 用户身份运行 Rsync pod。
在这两种情况下,您必须在迁移前运行具有较高权限的工作负载的命名空间源上设置以下标签:
enforce
、
audit
和
warn。
要了解更多有关标签的 Pod Security Admission 和设置值的信息,请参阅
控制 pod 安全准入同步
。
4.5.1. 将所有迁移的 MigrationController CR 配置为 root 或非 root
默认情况下,Rsync 作为非 root 运行。
在目标集群中,您可以将
MigrationController
CR 配置为以 root 用户身份运行 Rsync。
配置
MigrationController
CR,如下所示:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
migration_rsync_privileged: true
此配置将适用于所有将来的迁移。
4.5.2. 将 MigMigration CR 配置为每个迁移的根或非 root
在目标集群中,您可以使用以下非 root 选项将
MigMigration
CR 配置为以 root 或非 root 身份运行 Rsync:
作为特定用户 ID (UID)
作为一个特定组 ID (GID)
要以 root 用户身份运行 Rsync,请根据本例配置
MigMigration
CR:
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
runAsRoot: true
-
要将 Rsync 作为特定用户 ID (UID)或特定组 ID (GID)运行,请根据本例配置
MigMigration
CR:
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
runAsUser: 10010001
runAsGroup: 3
Multicloud 对象网关是受限网络环境唯一支持的选项。
MTC 支持
使用文件系统和快照数据复制的方法
将数据从源集群迁移到目标集群。您可以选择适合于您的环境并受您的存储供应商支持的方法。
-
所有集群都必须具有对复制存储库的不间断网络访问权限。
如果您将代理服务器与内部托管的复制存储库搭配使用,您必须确保代理允许访问复制存储库。
您必须检索 Multicloud Object Gateway(MCG)凭证,以便为 OpenShift API 创建用于数据保护(OADP)的
Secret
自定义资源(CR)。
MCG 是 OpenShift Data Foundation 的一个组件。
请根据相关的
OpenShift Data Foundation 部署指南
部署 OpenShift Data Foundation。
通过对
NooBaa
自定义资源运行
describe
命令,获取 S3 端点、
AWS_ACCESS_KEY_ID
和
AWS_SECRET_ACCESS_KEY
。
您可以卸载 MTC,并删除其资源来清理集群。
删除
velero
CRD 会从集群中移除 Velero。
您必须以具有
cluster-admin
权限的用户身份登录。
删除所有集群中的
MigrationController
自定义资源 (CR):
$ oc delete migrationcontroller <migration_controller>
-
使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4 上卸载 MTC Operator。
运行以下命令,删除所有集群中的集群范围资源:
migration
自定义资源定义 (CRDs):
$ oc delete $(oc get crds -o name | grep 'migration.openshift.io')
-
Velero
CRD:
$ oc delete $(oc get crds -o name | grep 'velero')
-
migration
集群角色:
$ oc delete $(oc get clusterroles -o name | grep 'migration.openshift.io')
-
migration-operator
集群角色:
$ oc delete clusterrole migration-operator
-
velero
集群角色:
$ oc delete $(oc get clusterroles -o name | grep 'velero')
-
migration
集群角色绑定:
$ oc delete $(oc get clusterrolebindings -o name | grep 'migration.openshift.io')
-
migration-operator
集群角色绑定:
$ oc delete clusterrolebindings migration-operator
-
velero
集群角色绑定:
$ oc delete $(oc get clusterrolebindings -o name | grep 'velero')
您可以使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4.15 上升级 MTC。
您可以通过重新安装 Containers Operator 的传统 Migration Toolkit for Containers Operator,在 OpenShift Container Platform 4.5 及更早的版本上升级 MTC。
如果要升级到 MTC 1.3,您必须执行额外步骤来更新
MigPlan
自定义资源(CR)。
5.1. 在 OpenShift Container Platform 4.15 中升级 MTC
您可以使用 Operator Lifecycle Manager 在 OpenShift Container Platform 4.15 上升级 MTC。
当使用 Operator Lifecycle Manager 升级 MTC 时,必须使用受支持的迁移路径。
从 OpenShift Container Platform 3 迁移到 OpenShift Container Platform 4 需要旧的 MTC Operator 和 MTC 1.7.x。
不支持从 MTC 1.7.x 迁移到 MTC 1.8.x。
您必须使用 MTC 1.7.x 来迁移使用 OpenShift Container Platform 4.9 或更早版本源的任何内容。
MTC 1.7.x 必须在源和目标中使用。
MTC 1.8.x 仅支持从 OpenShift Container Platform 4.10 或更高版本迁移到 OpenShift Container Platform 4.10 或更高版本。对于仅涉及集群版本 4.10 或更高版本的迁移,可以使用 1.7.x 或 1.8.x。但是,它必须与源和目标上的 MTC 版本相同。
不支持从源 MTC 1.7.x 迁移到目标 MTC 1.8.x。
不支持从源 MTC 1.8.x 迁移到目标 MTC 1.7.x。
支持从源 MTC 1.7.x 迁移到目标 MTC 1.7.x。
支持从源 MTC 1.8.x 迁移到目标 MTC 1.8.x
您必须以具有
cluster-admin
权限的用户身份登录。
在 OpenShift Container Platform 控制台中导航至
Operators
→
Installed Operators
。
处于待定升级的 operator 会显示
Upgrade available
状态。
点
Migration Toolkit for Containers Operator
。
点
Subscription
标签页。任何需要批准的升级都会在
Upgrade Status
旁边显示。例如:它可能会显示
1 requires approval
。
点
1 requires approval
,然后点
Preview Install Plan
。
查看列出可用于升级的资源,并点
Approve
。
返回
Operators → Installed Operators
页面来监控升级的过程。完成后,状态会变为
Succeeded
和
Up to date
。
点
Workloads
→
Pods
来验证 MTC pod 正在运行 。
要将 MTC 升级到 1.8.0,请完成以下步骤。
使用以下方法之一确定要升级的订阅名称和当前频道:
运行以下命令确定订阅名称和频道:
$ oc -n openshift-migration get sub
5.3. 在 OpenShift Container Platform 版本 4.2 中将 MTC 升级到 4.5
您可以通过手动安装旧的 MTC Operator,将 OpenShift Container Platform 版本 4.2 上的 MTC 升级到 4.5。
您必须以具有
cluster-admin
权限的用户身份登录。
您必须有权访问
registry.redhat.io
。
必须安装
podman
。
输入以下命令,使用您的红帽客户门户网站凭证登录到
registry.redhat.io
:
$ podman login registry.redhat.io
-
输入以下命令下载
operator.yml
文件:
$ podman cp $(podman create \
registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator:v1.8):/operator.yml ./
-
输入以下命令替换 Containers Operator 的 Migration Toolkit:
$ oc replace --force -f operator.yml
-
输入以下命令将
migration-operator
部署扩展到
0
以停止部署:
$ oc scale -n openshift-migration --replicas=0 deployment/migration-operator
-
输入以下命令将
migration-operator
部署扩展到
1
以启动部署并应用更改:
$ oc scale -n openshift-migration --replicas=1 deployment/migration-operator
-
输入以下命令验证
migration-operator
是否已升级:
$ oc -o yaml -n openshift-migration get deployment/migration-operator | grep image: | awk -F ":" '{ print $NF }'
-
输入以下命令下载
controller.yml
文件:
$ podman cp $(podman create \
registry.redhat.io/rhmtc/openshift-migration-legacy-rhel8-operator:v1.8):/controller.yml ./
-
运行以下命令来创建
migration-controller
对象:
$ oc create -f controller.yml
-
输入以下命令验证 MTC pod 是否正在运行:
$ oc get pods -n openshift-migration
如果要将 MTC 版本 1.3.x 升级到 1.8,您必须更新运行
MigrationController
Pod 的集群中的
MigPlan
自定义资源(CR)清单。
由于 MTC 1.3 中不存在
indirectImageMigration
和
indirectVolumeMigration
参数,它们在 1.4 版中的默认值会为
false
,这意味着启用了直接镜像迁移和直接卷迁移。由于没有满足直接迁移要求,迁移计划无法变为
Ready
状态,除非将这些参数值改为
true
。
从 OpenShift Container Platform 3 迁移到 OpenShift Container Platform 4 需要旧的 MTC Operator 和 MTC 1.7.x。
将 MTC 1.7.x 升级到 1.8.x 需要手动将 OADP 频道从
stable-1.0
更新至
stable-1.2
,以便成功完成从 1.7.x 升级到 1.8.x。
您必须以具有
cluster-admin
权限的用户身份登录。
登录到运行
MigrationController
Pod 的集群。
获取
MigPlan
CR 清单:
$ oc get migplan <migplan> -o yaml -n openshift-migration
-
更新以下参数值,并将文件保存为
migplan.yaml
:
spec:
indirectImageMigration: true
indirectVolumeMigration: true
-
替换
MigPlan
CR 清单以应用更改:
$ oc replace -f migplan.yaml -n openshift-migration
-
获取更新的
MigPlan
CR 清单以验证更改:
$ oc get migplan <migplan> -o yaml -n openshift-migration
在使用 Migration Toolkit for Containers(MTC)迁移应用程序工作负载前,请查看以下检查列表。
-
❏ 集群满足特定平台和安装方法(例如在
裸机
上)的最低硬件要求。
❏
满足所有 MTC 的先决条件
。
❏ 所有节点都有一个有效的 OpenShift Container Platform 订阅。
❏
已验证节点健康状况
。
❏
身份提供程序
可以正常工作。
❏ 迁移网络的最小吞吐量为 10 Gbps。
❏ 集群有足够的资源进行迁移。
集群需要额外的内存、CPU 和存储,以便在正常工作负载之上运行迁移。实际的资源要求取决于单个迁移计划中迁移的 Kubernetes 资源数量。您必须在非生产环境中测试迁移,以便估计资源要求。
❏ 已使用
fio
检查了集群的
etcd 磁盘性能
。
-
❏ 您已通过运行以下命令检查是否有异常配置的处于
Terminating
状态的持久性卷(PV):
$ oc get pv
-
❏ 您已通过运行以下命令检查了状态不是
Running
或
Completed
的 pod:
$ oc get pods --all-namespaces | egrep -v 'Running | Completed'
-
❏ 您已通过运行以下命令来检查有高重启次数的 pod:
$ oc get pods --all-namespaces --field-selector=status.phase=Running \
-o json | jq '.items[]|select(any( .status.containerStatuses[]; \
.restartCount > 3))|.metadata.name'
即使 pod 处于
Running
状态,具有高的重启次数可能表示底层有问题。
❏ 集群证书在迁移过程中是有效的。
❏ 您已通过运行以下命令检查是否有待处理的证书签名请求:
$ oc get csr -A | grep pending -i
-
❏ registry 使用
推荐的存储类型
。
❏ 您可以将镜像读取和写入到 registry。
❏
etcd 集群
是健康的。
❏ 源集群中的
平均 API 服务器响应时间
小于 50 ms。
-
❏ 集群具有访问外部服务(如数据库、源代码存储库、容器镜像 registry 和 CI/CD 工具)的正确网络配置和权限。
❏ 使用集群提供的服务的外部应用程序和服务具有访问集群的正确网络配置和权限。
❏ 满足内部容器镜像所需的依赖项要求。
❏ 目标集群和复制存储库有足够的存储空间。
检查迁移后用于重定向应用程序网络流量的策略。
目标集群的 DNS 域与源集群的域不同。默认情况下,应用程序在迁移后获取目标集群的 FQDN。
要保留迁移的应用程序的源 DNS 域,请选择下面描述的两个选项之一。
7.1.1. 将目标集群的 DNS 域与客户端隔离
您可以允许发送到源集群的 DNS 域的客户端请求访问目标集群的 DNS 域,而无需将目标集群公开给客户端。
将外部网络组件(如应用程序负载均衡器或反向代理)放在客户端和目标集群之间。
更新 DNS 服务器上的源集群中的应用程序 FQDN,以返回 exterior 网络组件的 IP 地址。
配置网络组件,将源域中为应用接收的请求发送到目标集群域中的负载均衡器。
为
*.apps.source.example.com
域创建一个通配符 DNS 记录,指向源集群的负载均衡器的 IP 地址。
为每个应用程序创建一个 DNS 记录,指向目标集群前面的 exterior 网络组件的 IP 地址。特定的 DNS 记录的优先级高于通配符记录,因此在解决应用 FQDN 时不会发生冲突。
外部网络组件必须终止所有安全的 TLS 连接。如果连接传递给目标集群负载均衡器,目标应用程序的 FQDN 会公开给客户端,证书发生错误。
应用程序不得将引用目标集群域的链接返回给客户端。否则,应用的某些部分可能无法加载或正常工作。
您可以设置目标集群,以接受源集群的 DNS 域中迁移的应用程序的请求。
对于非安全 HTTP 访问和安全 HTTPS 访问,请执行以下步骤:
在目标集群的项目中创建一个路由,该路由配置为接受源集群中处理的应用程序 FQDN 的请求:
$ oc expose svc <app1-svc> --hostname <app1.apps.source.example.com> \
-n <app1-namespace>
新路由就位后,服务器接受对该 FQDN 的任何请求,并将它发送到对应的应用容器集。另外,当迁移应用程序时,会在目标集群域中创建另一个路由。请求会使用这些主机名之一到达迁移的应用。
使用您的 DNS 供应商创建 DNS 记录,将源集群中的应用的 FQDN 指向目标集群的默认负载均衡器的 IP 地址。这会将来自源集群的流量重定向到目标集群。
应用程序的 FQDN 解析到目标集群的负载均衡器。默认入口控制器路由器接受对该 FQDN 的请求,因为公开了该主机名的路由。
对于安全 HTTPS 访问,请执行以下步骤:
将在安装过程中创建的默认入口控制器的 x509 证书替换为自定义证书。
将这个证书配置为在
subjectAltName
字段中为源和目标集群包含通配符 DNS 域。
新证书对于保护使用 DNS 域进行的连接有效。
如需更多信息,请参阅
替换默认入口证书
。
迁移成功后,您必须将无状态应用的网络流量从源集群重定向到目标集群。
重定向网络流量的策略基于以下假设:
应用程序 pod 在源集群和目标集群上运行。
每个应用都有一个包含源集群主机名的路由。
源集群主机名的路由包含 CA 证书。
对于 HTTPS,目标路由器 CA 证书包含用于源集群的通配符 DNS 记录的 Subject 备用名称。
考虑以下策略并选择符合您目标的策略。
同时重定向所有应用的所有网络流量
更改源集群的通配符 DNS 记录,使其指向目标集群路由器的虚拟 IP 地址 (VIP)。
此策略适用于简单应用程序或小型环境的迁移。
为单个应用重定向网络流量
使用指向目标集群路由器 VIP 的源集群主机名为每个应用程序创建一个 DNS 记录。这个 DNS 记录优先于源集群通配符 DNS 记录。
为单个应用逐步重定向网络流量
创建一个代理,用于将流量定向到每个应用程序的源集群路由器的 VIP 和目标集群路由器的 VIP。
使用指向代理的源集群主机名为每个应用程序创建一个 DNS 记录。
配置应用的代理条目,将流量百分比路由到目标集群路由器的 VIP,并将其余流量路由到源集群路由器的 VIP。
逐渐增加您路由到目标集群路由器 VIP 的流量百分比,直到所有网络流量被重定向为止。
基于用户的单个应用程序流量重定向
使用此策略,您可以过滤用户请求的 TCP/IP 标头,以便为预定义的用户组重定向网络流量。这允许您在重定向整个网络流量之前测试用户特定版本的重定向过程。
创建一个代理,用于将流量定向到每个应用程序的源集群路由器的 VIP 和目标集群路由器的 VIP。
使用指向代理的源集群主机名为每个应用程序创建一个 DNS 记录。
配置应用的代理条目,将匹配给定标头模式的流量(如
测试客户
)路由到目标集群路由器的 VIP,并将其余流量路由到源集群路由器的 VIP。
将流量分阶段重定向到目标集群路由器的 VIP,直到所有流量都位于目标集群路由器的 VIP 上。
您可以使用 Migration Toolkit for Containers(MTC)web 控制台或
命令行
来迁移应用程序。
大多数集群范围的资源还没有由 MTC 处理。如果应用程序需要集群范围的资源,则可能需要在目标集群上手动创建。
您可以使用阶段迁移和剪切迁移在集群间迁移应用程序:
阶段迁移 (Stage migration) 会在不停止应用程序的情况下将数据从源集群复制到目标集群。您可以多次运行一个阶段迁移来缩短迁移的持续时间。
剪切迁移 (Cutover migration) 将停止源集群中的事务,并将资源移到目标集群。
您可以使用状态迁移来迁移应用程序的状态:
状态迁移复制所选持久性卷声明 (PVC)。
您可以使用状态迁移来迁移同一集群中的命名空间。
在迁移过程中,MTC 会保留以下命名空间注解:
openshift.io/sa.scc.mcs
openshift.io/sa.scc.supplemental-groups
openshift.io/sa.scc.uid-range
这些注解会保留 UID 范围,确保容器在目标集群中保留其文件系统权限。这可能会存在一定的风险。因为迁移的 UID 可能已存在于目标集群的现有或将来的命名空间中。
-
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
直接镜像迁移
-
您必须确保源集群的安全 OpenShift 镜像 registry 已公开。
您必须创建指向公开 registry 的路由。
直接卷迁移
-
如果您的集群使用代理,您必须配置 Stunnel TCP 代理。
源集群必须升级到最新的 MTC z-stream 版本。
在所有集群中,MTC 版本必须相同。
集群在相互间有无限制的网络访问,并可以访问复制存储库。
如果您复制有
移动
的持久性卷,集群必须具有对远程卷的不受限制的网络访问权限。
您必须在 OpenShift Container Platform 4 集群中启用以下端口:
6443
(API 服务器)
443
(路由)
53
(DNS)
如果使用 TLS,则必须在复制存储库中启用端口
443
。
持久性卷(PV)
-
PV 必须有效。
PV 必须绑定到持久性卷声明。
如果使用快照复制 PV,则需要满足以下额外先决条件:
云供应商必须支持快照。
PV 必须具有相同的云供应商。
PV 必须位于同一区域。
PV 必须具有相同的存储类。
8.2. 使用 MTC web 控制台迁移应用程序
您可以使用 MTC web 控制台配置集群和复制存储库。然后,您可以创建并运行迁移计划。
您可以在浏览器中启动 MTC web 控制台。
MTC web 控制台必须具有到 OpenShift Container Platform Web 控制台的网络访问权限。
MTC web 控制台必须具有到 OAuth 授权服务器的网络访问权限。
登录到已安装 MTC 的 OpenShift Container Platform 集群。
输入以下命令来获取 MTC web 控制台 URL:
$ oc get -n openshift-migration route/migration -o go-template='https://{{ .spec.host }}'
输出类似于以下:
https://migration-openshift-migration.apps.cluster.openshift.com
。
启动浏览器并进入 MTC web 控制台。
如果在安装 MTC 工具套件 Operator 后尝试立即访问 MTC web 控制台,则该控制台可能无法加载,因为 Operator 仍然在配置集群。等待几分钟后重试。
如果您使用自签名的 CA 证书,则会提示您接受源集群 API 服务器的 CA 证书。网页会引导您接受剩余证书的过程。
使用 OpenShift Container Platform 的
用户名
和
密码
进行登陆。
8.2.2. 在 MTC web 控制台中添加集群
您可以在 MTC web 控制台中添加一个集群到 Migration Toolkit for Containers(MTC)web 控制台。
如果要使用 Azure 快照复制数据:
您必须为集群指定 Azure 资源组名称。
集群必须位于同一 Azure 资源组中。
集群必须位于同一地理位置。
如果使用直接镜像迁移,则必须公开到源集群的镜像 registry 的路由。
登录到集群。
获取
migration-controller
服务帐户令牌:
$ oc sa get-token migration-controller -n openshift-migration
-
Azure cluster
:如果使用 Azure 快照复制数据,您必须选择此选项。
Azure resource group
:如果选择了
Azure cluster
,则会显示此字段。指定 Azure 资源组。
需要 SSL 验证
:可选:选择这个选项验证到集群的 SSL 连接。
CA bundle file
:如果选择了
Require SSL 验证
,则会显示此字段。如果您为自签名证书创建了自定义 CA 证书捆绑包文件,请点
Browse
,选择 CA 捆绑包文件并上传它。
点
Add cluster
。
集群会出现在
Clusters
列表中。
8.2.3. 在 MTC web 控制台中添加复制存储库
您可以将对象存储作为复制存储库添加到 MTC web 控制台的 Migration Toolkit for Containers (MTC) web 控制台中。
MTC 支持以下存储供应商:
Amazon Web Services (AWS) S3
多云对象网关 (MCG)
通用 S3 对象存储,例如 Minio 或 Ceph S3
Google Cloud Provider (GCP)
Microsoft Azure Blob
您必须将对象存储配置为复制存储库。
在 MTC web 控制台中点
Replication repositories
。
点
Add repository
。
选择
Storage provider type
并填写以下字段:
用于 S3 供应商的
AWS
,包括 AWS 和 MCG:
Replication repository name
:指定 MTC web 控制台中的复制存储库。
S3 bucket name
:指定 S3 存储桶的名称。
S3 bucket region
:指定 S3 存储桶区域。AWS S3
必填
。对于某些 S3 供应商是
可选的
。检查 S3 供应商的产品文档,以获取预期值。
S3 端点
:指定 S3 服务的 URL,而不是存储桶,例如:
https://<s3-storage.apps.cluster.com>
。通用 S3 供应商
必填
。您必须使用
https://
前缀。
S3 provider access key
:为 AWS 指定
<AWS_SECRET_ACCESS_KEY>
,或者为 MCG 和其他 S3 供应商指定 S3 供应商访问密钥。
S3 provider secret access key
:为 AWS 指定
<AWS_ACCESS_KEY_ID>
,或为 MCG 和其他 S3 供应商指定 S3 provider secret 访问密钥。
Require SSL verification
:如果您使用的是通用 S3 供应商,则清除此复选框。
如果您为自签名证书创建了自定义 CA 证书捆绑包,点
Browse
并浏览到 Base64 编码的文件。
GCP
:
Replication repository name
:指定 MTC web 控制台中的复制存储库。
GCP bucket name
:指定 GCP 存储桶的名称。
GCP credential JSON blob
:在
credentials-velero
文件中指定字符串。
Azure
:
Replication repository name
:指定 MTC web 控制台中的复制存储库。
Azure resource group
:指定 Azure Blob 存储的资源组。
Azure storage account name
:指定 Azure Blob 存储帐户名称。
Azure credentials - INI file contents
:在
credentials-velero
文件中指定字符串。
点
Add repository
并等待连接验证。
点
Close
。
新仓库会出现在
Replication repositories
列表中。
8.2.4. 在 MTC web 控制台中创建迁移计划
您可以在 Migration Toolkit for Containers(MTC)web 控制台中创建一个迁移计划。
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
您必须确保在所有集群中安装相同的 MTC 版本。
您必须在 MTC web 控制台中添加集群和复制存储库。
如果要使用
move
数据复制方法迁移持久性卷(PV),则源和目标集群必须有对远程卷的不间断网络访问权限。
如果要使用直接镜像迁移,您必须指定源集群的镜像 registry 公开的路由。这可以通过使用 MTC web 控制台或更新
MigCluster
自定义资源清单来实现。
在 MTC web 控制台中点
Migration Plan
。
点
Add migration plan
。
输入
Plan 名称
。
迁移计划名称不能超过 253 个小写字母数字字符(
a-z, 0-9
),且不能包含空格或下划线(
_
)。
选择
Source cluster
、
Target cluster
和
Repository
。
点击
Next
。
选择要迁移的项目。
可选:点击项目旁边的编辑图标来更改目标命名空间。
点击
Next
。
为每个 PV 选择一个
迁移类型
:
Copy
选项将源集群的 PV 中的数据复制到复制存储库中,然后在目标集群中恢复新创建的具有类似特征的 PV 上的数据。
Move
选项从源集群中卸载一个远程卷(例如 NFS),在目标集群上创建一个指向这个远程卷的 PV 资源,然后在目标集群中挂载远程卷。在目标集群中运行的应用程序使用源集群使用的同一远程卷。
点击
Next
。
为每个 PV 选择
Copy method
:
快照复制
使用云供应商的快照功能备份和恢复数据。它比
Filesystem copy
要快得多。
Filesystem copy
备份源集群中的文件,并在目标集群中恢复它们。
直接卷迁移需要使用文件系统复制方法。
您可以选择
Verify copy
来验证使用
Filesystem copy
迁移的数据。数据是通过为每个源文件生成 checksum 并在恢复后检查 checksum 来验证。数据校验可能会显著降低性能。
选择
目标存储类
。
如果选择了
Filesystem copy
,您可以更改目标存储类。
点击
Next
。
在
Migration options
页面上,如果您为源集群指定了公开的镜像 registry 路由,则会选择
Direct 镜像迁移
选项。如果使用
Filesystem copy
迁移数据,
Direct PV migration
选项会被选择。
直接迁移选项将镜像和文件直接从源集群复制到目标集群。这个选项比将源集群的镜像和文件复制到复制存储库,然后再从复制存储库复制到目标集群要快。
点击
Next
。
可选:点
Add Hook
在迁移计划中添加 hook。
hook 运行自定义代码。您可以在单个迁移计划中最多添加四个 hook。每个 hook 在不同的迁移步骤中运行。
在 web 控制台中输入要显示的 hook 名称。
如果 hook 是一个 Ansible playbook,请选择
Ansible playbook
,然后点
Browse
上传 playbook,或在字段中粘贴 playbook 的内容。
可选: 如果不使用默认 hook 镜像,请指定 Ansible 运行时镜像。
如果 hook 不是 Ansible playbook,选择
Custom container image
并指定镜像名称和路径。
自定义容器镜像可以包含 Ansible playbook。
选择
Source cluster
或
Target cluster
。
输入
Service account name
和
Service account namespace
。
为 hook 选择迁移步骤:
preBackup
:在应用程序工作负载在源集群中备份前
PostBackup
:在应用程序工作负载在源集群中备份后
preRestore
:在目标集群中恢复应用程序工作负载前
postRestore
:在目标集群中恢复应用程序工作负载后
点击
Add
。
点
Finish
。
迁移计划显示在
Migration Plan
列表中。
持久性卷复制方法的其他资源
8.2.5. 在 MTC web 控制台中运行迁移计划
您可以使用在 Migration Toolkit for Containers(MTC)web 控制台中创建的迁移计划来迁移应用程序和数据。
迁移过程中,在目标集群中,MTC 将迁移的持久性卷(PV)的重新声明策略设置为
Retain
。
Backup
自定义资源包含一个
PVOriginalReclaimPolicy
注解,用于指示原始重新声明策略。您可以手动恢复迁移 PV 的重新声明策略。
MTC web 控制台必须包含以下内容:
处于
Ready
状态的源集群
处于
Ready
状态的目标集群
复制软件仓库
有效的迁移计划
登录到 MTC web 控制台并点
迁移计划
。
点击迁移计划
旁边的 Options 菜单,并在
Migration
中选择以下选项之一:
stage
在不停止应用程序的情况下将数据从源集群复制到目标集群。
cutover
会停止源集群上的事务,并将资源移到目标集群。
可选:在
Cutover 迁移
对话框中,您可以清除
Halt transactions on the source cluster during migration
多选设置。
State
会复制所选持久性卷声明(PVC)。
不要使用状态迁移来在集群之间迁移命名空间。使用 stage 或 cutover migration。
在
状态迁移
对话框中选择一个或多个 PVC 并点
Migrate
。
迁移完成后,在 OpenShift Container Platform web 控制台中确认已成功迁移了应用程序:
点
Home
→
Projects
。
点迁移的项目查看其状态。
在
Routes
部分,点击
Location
验证应用程序是否正常运行。
点
Workloads
→
Pods
来验证 pod 是否在迁移的命名空间中运行。
点
Storage
→
Persistent volumes
来验证是否正确置备了已迁移的持久性卷。
您可以自动化迁移并修改
MigPlan
和
MigrationController
自定义资源,以执行大规模迁移并提高性能。
表 9.1. MTC 术语
术语
|
定义
|
从中迁移应用程序的集群。
目标集群
[1]
将应用程序迁移到的集群。
复制软件仓库
用于在间接迁移过程中复制镜像、卷和 Kubernetes 对象的对象存储,或者用于直接卷迁移或直接镜像迁移期间 Kubernetes 对象的对象存储。
复制存储库必须可以被所有集群访问。
运行
migration-controller
pod 和 Web 控制台的集群。主机集群通常是目标集群,但这不是必需的。
主机集群不需要公开的 registry 路由来直接迁移镜像。
远程集群通常是源集群,但这不是必需的。
远程集群需要一个包含
migration-controller
服务帐户令牌的
Secret
自定义资源。
远程集群需要一个公开的安全 registry 路由来直接迁移镜像。
镜像、卷和 Kubernetes 对象从源集群复制到复制存储库,然后从复制存储库复制到目标集群。
直接卷迁移
持久性卷直接从源集群复制到目标集群。
直接镜像迁移
镜像直接从源集群复制到目标集群。
在不停止应用程序的情况下,数据将复制到目标集群。
多次运行阶段迁移会缩短迁移的持续时间。
应用在源集群中停止,其资源迁移到目标集群。
通过将特定的持久性卷声明复制到目标集群来迁移应用程序状态。
回滚迁移会回滚一个已完成的迁移。
1
在 MTC web 控制台中称为
目标集群
。
您可以使用命令行界面 (CLI) 使用 MTC API 迁移应用程序,以便自动执行迁移。
-
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
直接镜像迁移
-
您必须确保源集群的安全 OpenShift 镜像 registry 已公开。
您必须创建指向公开 registry 的路由。
直接卷迁移
-
如果您的集群使用代理,您必须配置 Stunnel TCP 代理。
源集群必须升级到最新的 MTC z-stream 版本。
在所有集群中,MTC 版本必须相同。
集群在相互间有无限制的网络访问,并可以访问复制存储库。
如果您复制有
移动
的持久性卷,集群必须具有对远程卷的不受限制的网络访问权限。
您必须在 OpenShift Container Platform 4 集群中启用以下端口:
6443
(API 服务器)
443
(路由)
53
(DNS)
如果使用 TLS,则必须在复制存储库中启用端口
443
。
持久性卷(PV)
-
PV 必须有效。
PV 必须绑定到持久性卷声明。
如果使用快照复制 PV,则需要满足以下额外先决条件:
云供应商必须支持快照。
PV 必须具有相同的云供应商。
PV 必须位于同一区域。
PV 必须具有相同的存储类。
9.2.2. 创建用于直接镜像迁移的 registry 路由
要直接镜像迁移,您必须在所有远程集群中创建指向公开的 OpenShift 镜像 registry 的路由。
OpenShift 镜像 registry 必须公开给所有远程集群上的外部流量。
OpenShift Container Platform 4 registry 默认公开。
要创建到 OpenShift Container Platform 4 registry 的路由,请运行以下命令:
$ oc create route passthrough --service=image-registry -n openshift-image-registry
对于 OpenShift Container Platform 4.1 及更早的版本,您必须在安装 Migration Toolkit for Containers Operator 后,在
MigrationController
自定义资源 (CR) 清单中配置代理,因为这些版本不支持集群范围的
proxy
对象。
对于 OpenShift Container Platform 4.2 到 4.15,Migration Toolkit for Containers (MTC) 会继承集群范围的代理设置。如果要覆盖集群范围的代理设置,可以更改代理参数。
MTC 1.4.2 中引入了直接卷迁移(DVM)。DVM 只支持一个代理。如果目标集群也位于代理后面,则源集群无法访问目标集群的路由。
如果要从代理后面的源集群执行 DVM,您必须配置一个 TCP 代理,该代理可在传输层进行透明处理,并在不使用自己的 SSL 证书的情况下转发 SSL 连接。Stunnel 代理是此类代理的示例。
9.2.3.1.1. DVM 的 TCP 代理设置
您可以通过 TCP 代理在源和目标集群之间设置直接连接,并在
MigrationController
CR 中配置
stunnel_tcp_proxy
变量来使用代理:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
stunnel_tcp_proxy: http://username:password@ip:port
直接卷迁移(DVM)只支持代理的基本身份验证。此外,DVM 仅适用于可透明地传输 TCP 连接的代理。在 man-in-the-middle 模式中的 HTTP/HTTPS 代理无法正常工作。现有的集群范围的代理可能不支持此行为。因此,DVM 的代理设置意与 MTC 中常见的代理配置不同。
9.2.3.1.2. 为什么使用 TCP 代理而不是 HTTP/HTTPS 代理?
您可以通过 OpenShift 路由在源和目标集群之间运行 Rsync 来启用 DVM。流量通过 TCP 代理(Stunnel)加密。在源集群上运行的 Stunnel 会启动与目标 Stunnel 的 TLS 连接,并通过加密频道来传输数据。
OpenShift 中的集群范围 HTTP/HTTPS 代理通常在 man-in-the-middle 模式进行配置,其中它们将自己的 TLS 会话与外部服务器协商。但是,这不适用于 Stunnel。Stunnel 要求代理不处理它的 TLS 会话,基本上使代理成为一个透明的隧道,只需按原样转发 TCP 连接。因此,您必须使用 TCP 代理。
OpenShift 支持根据集群使用的网络插件,限制使用
NetworkPolicy
或
EgressFirewalls
的流量。如果任何涉及迁移的源命名空间使用此类机制将网络流量限制到 pod,限制可能会在迁移过程中停止到 Rsync pod 的流量。
在源和目标集群上运行的 rsync pod 必须通过 OpenShift Route 相互连接。可将现有的
NetworkPolicy
或
EgressNetworkPolicy
对象配置为从这些流量限制自动排除 Rsync pod。
9.2.3.2.1. NetworkPolicy 配置
9.2.3.2.1.1. 来自 Rsync pod 的出口流量
如果源或目标命名空间中的
NetworkPolicy
配置阻止这种类型的流量,您可以使用 Rsync pod 的唯一标签来允许出口流量从它们传递。以下策略允许来自命名空间中 Rsync pod 的
所有
出口流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress-from-rsync-pods
spec:
podSelector:
matchLabels:
owner: directvolumemigration
app: directvolumemigration-rsync-transfer
egress:
policyTypes:
- Egress
9.2.3.2.1.2. 到 Rsync pod 的入口流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-egress-from-rsync-pods
spec:
podSelector:
matchLabels:
owner: directvolumemigration
app: directvolumemigration-rsync-transfer
ingress:
policyTypes:
- Ingress
9.2.3.2.2. EgressNetworkPolicy 配置
EgressNetworkPolicy
对象或
Egress Firewalls
是 OpenShift 构造,用于阻止离开集群的出口流量。
与
NetworkPolicy
对象不同,egress Firewall 在项目级别工作,因为它适用于命名空间中的所有 pod。因此,Rsync pod 的唯一标签不会使只有 Rsync pod 的 Rsync pod 冲突。但是,您可以将源集群或目标集群的 CIDR 范围添加到策略的
Allow
规则中,以便可以在两个集群之间设置直接连接。
根据存在 Egress Firewall 的集群,您可以添加其他集群的 CIDR 范围来允许两者间的出口流量:
apiVersion: network.openshift.io/v1
kind: EgressNetworkPolicy
metadata:
name: test-egress-policy
namespace: <namespace>
spec:
egress:
- to:
cidrSelector: <cidr_of_source_or_target_cluster>
type: Deny
默认情况下,DVM 使用 OpenShift Container Platform 路由作为端点,将 PV 数据传送到目标集群。如果集群拓扑允许,您可以选择其他类型的支持的端点。
对于每个集群,您可以通过在
MigrationController
CR 中适当的
目标
集群上设置
rsync_endpoint_type
变量来配置端点:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
[...]
rsync_endpoint_type: [NodePort|ClusterIP|Route]
9.2.3.2.4. 为 Rsync pod 配置补充组
当 PVC 使用共享存储时,您可以通过将 supplemental 组添加到 Rsync pod 定义来配置对存储的访问,以便 pod 允许访问:
表 9.2. Rsync pod 的附加组群
变量
|
类型
|
Default(默认)
|
描述
|
src_supplemental_groups
string
用于源 Rsync pod 的以逗号分隔的补充组列表
target_supplemental_groups
string
目标 Rsync pod 的,以逗号分隔的补充组列表
可以更新
MigrationController
CR,以便为这些补充组设置值:
spec:
src_supplemental_groups: "1000,2000"
target_supplemental_groups: "2000,3000"
先决条件
-
必须使用在所有集群中具有
cluster-admin
权限的用户登录。
获取
MigrationController
CR 清单:
$ oc get migrationcontroller <migration_controller> -n openshift-migration
-
更新代理参数:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: <migration_controller>
namespace: openshift-migration
spec:
stunnel_tcp_proxy: http://<username>:<password>@<ip>:<port> 1
noProxy: example.com 2
-
1
-
用于直接卷迁移的 stunnel 代理 URL。
要排除代理的目标域名、域、IP 地址或其他网络 CIDR 的逗号分隔列表。
在域前面加
.
来仅匹配子域。例如:
.y.com
匹配
x.y.com
,但不匹配
y.com
。使用
*
可对所有目的地绕过所有代理。如果您扩展了未包含在安装配置中
networking.machineNetwork[].cidr
字段定义的 worker,您必须将它们添加到此列表中,以防止连接问题。
如果未设置
httpProxy
和
httpsProxy
字段,则此字段将被忽略。
将清单保存为
migration-controller.yaml
。
应用更新的清单:
$ oc replace -f migration-controller.yaml -n openshift-migration
您可以使用 MTC API 从命令行迁移应用程序。
为主机集群创建一个
MigCluster
CR 清单:
$ cat << EOF | oc apply -f -
apiVersion: migration.openshift.io/v1alpha1
kind: MigCluster
metadata:
name: <host_cluster>
namespace: openshift-migration
spec:
isHostCluster: true
为每个远程集群创建一个 Secret 对象清单:
$ cat << EOF | oc apply -f -
apiVersion: v1
kind: Secret
metadata:
name: <cluster_secret>
namespace: openshift-config
type: Opaque
data:
saToken: <sa_token> 1
EOF - 1
指定远程集群的 base64 编码的 migration-controller 服务帐户(SA)令牌。您可以运行以下命令来获取令牌:
$ oc sa get-token migration-controller -n openshift-migration | base64 -w 0
为每个远程集群创建一个 MigCluster CR 清单:
$ cat << EOF | oc apply -f -
apiVersion: migration.openshift.io/v1alpha1
kind: MigCluster
metadata:
name: <remote_cluster> 1
namespace: openshift-migration
spec:
exposedRegistryPath: <exposed_registry_route> 2
insecure: false 3
isHostCluster: false
serviceAccountSecretRef:
name: <remote_cluster_secret> 4
namespace: openshift-config
url: <remote_cluster_url> 5
EOF - 1
指定远程集群的 Cluster CR。
可选: 要直接镜像迁移,请指定公开的 registry 路由。
如果 false 则启用 SSL 验证。如果为 true ,则不需要 CA 证书或不检查 CA 证书。
指定远程集群的 Secret 对象。
指定远程集群的 URL。
验证所有集群是否处于 Ready 状态:
$ oc describe cluster <cluster>
为复制存储库创建 Secret 对象清单:
$ cat << EOF | oc apply -f -
apiVersion: v1
kind: Secret
metadata:
namespace: openshift-config
name: <migstorage_creds>
type: Opaque
data:
aws-access-key-id: <key_id_base64> 1
aws-secret-access-key: <secret_key_base64> 2
EOF - 1
指定 base64 格式的密钥 ID。
指定 base64 格式的 secret 密钥。
AWS 凭证默认为 base64 编码。对于其他存储供应商,您必须使用每个密钥运行以下命令来对凭证进行编码:
$ echo -n "<key>" | base64 -w 0 1 - 1
指定密钥 ID 或 secret 密钥。这两个密钥都必须都是 base64 编码。
为复制存储库创建一个 MigStorage CR 清单:
$ cat << EOF | oc apply -f -
apiVersion: migration.openshift.io/v1alpha1
kind: MigStorage
metadata:
name: <migstorage>
namespace: openshift-migration
spec:
backupStorageConfig:
awsBucketName: <bucket> 1
credsSecretRef:
name: <storage_secret> 2
namespace: openshift-config
backupStorageProvider: <storage_provider> 3
volumeSnapshotConfig:
credsSecretRef:
name: <storage_secret> 4
namespace: openshift-config
volumeSnapshotProvider: <storage_provider> 5
EOF - 1
指定存储桶名称。
指定对象存储的 Secrets CR。您必须确保存储在对象存储的 Secrets CR 中的凭证是正确的。
指定存储供应商。
可选: 如果要使用快照复制数据,请指定对象存储的 Secrets CR。您必须确保存储在对象存储的 Secrets CR 中的凭证是正确的。
可选: 如果您使用快照复制数据,请指定存储供应商。
验证 MigStorage CR 是否处于 Ready 状态:
$ oc describe migstorage <migstorage>
创建一个 MigPlan CR 清单:
$ cat << EOF | oc apply -f -
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
name: <migplan>
namespace: openshift-migration
spec:
destMigClusterRef:
name: <host_cluster>
namespace: openshift-migration
indirectImageMigration: true 1
indirectVolumeMigration: true 2
migStorageRef:
name: <migstorage> 3
namespace: openshift-migration
namespaces:
- <source_namespace_1> 4
- <source_namespace_2>
- <source_namespace_3>:<destination_namespace> 5
srcMigClusterRef:
name: <remote_cluster> 6
namespace: openshift-migration
EOF - 1
如果为 false ,则启用直接镜像迁移。
如果为 false ,则启用直接卷迁移。
指定 MigStorage CR 实例的名称。
指定一个或多个源命名空间。默认情况下,目标命名空间具有相同的名称。
如果目标命名空间与源命名空间不同,请指定目标命名空间。
指定源集群 MigCluster 实例的名称。
验证 MigPlan 实例是否处于 Ready 状态:
$ oc describe migplan <migplan> -n openshift-migration
创建一个 MigMigration CR 清单,以启动 MigPlan 实例中定义的迁移:
$ cat << EOF | oc apply -f -
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
name: <migmigration>
namespace: openshift-migration
spec:
migPlanRef:
name: <migplan> 1
namespace: openshift-migration
quiescePods: true 2
stage: false 3
rollback: false 4
EOF - 1
指定 MigPlan CR 名称。
如果为 true ,则源集群上的 pod 会在迁移前停止。
如果为 true ,则进行阶段(stage)迁移,即在不停止应用程序的情况下复制大多数数据。
如果为 true ,则会回滚到一个已完成的迁移。
通过观察 MigMigration CR 进度来验证迁移:
$ oc watch migmigration <migmigration> -n openshift-migration
输出类似于以下:
Name: c8b034c0-6567-11eb-9a4f-0bc004db0fbc
Namespace: openshift-migration
Labels: migration.openshift.io/migplan-name=django
Annotations: openshift.io/touch: e99f9083-6567-11eb-8420-0a580a81020c
API Version: migration.openshift.io/v1alpha1
Kind: MigMigration
Spec:
Mig Plan Ref:
Name: migplan
Namespace: openshift-migration
Stage: false
Status:
Conditions:
Category: Advisory
Last Transition Time: 2021-02-02T15:04:09Z
Message: Step: 19/47
Reason: InitialBackupCreated
Status: True
Type: Running
Category: Required
Last Transition Time: 2021-02-02T15:03:19Z
Message: The migration is ready.
Status: True
Type: Ready
Category: Required
Durable: true
Last Transition Time: 2021-02-02T15:04:05Z
Message: The migration registries are healthy.
Status: True
Type: RegistriesHealthy
Itinerary: Final
Observed Digest: 7fae9d21f15979c71ddc7dd075cb97061895caac5b936d92fae967019ab616d5
Phase: InitialBackupCreated
Pipeline:
Completed: 2021-02-02T15:04:07Z
Message: Completed
Name: Prepare
Started: 2021-02-02T15:03:18Z
Message: Waiting for initial Velero backup to complete.
Name: Backup
Phase: InitialBackupCreated
Progress:
Backup openshift-migration/c8b034c0-6567-11eb-9a4f-0bc004db0fbc-wpc44: 0 out of estimated total of 0 objects backed up (5s)
Started: 2021-02-02T15:04:07Z
Message: Not started
Name: StageBackup
Message: Not started
Name: StageRestore
Message: Not started
Name: DirectImage
Message: Not started
Name: DirectVolume
Message: Not started
Name: Restore
Message: Not started
Name: Cleanup
Start Timestamp: 2021-02-02T15:03:18Z
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Running 57s migmigration_controller Step: 2/47
Normal Running 57s migmigration_controller Step: 3/47
Normal Running 57s (x3 over 57s) migmigration_controller Step: 4/47
Normal Running 54s migmigration_controller Step: 5/47
Normal Running 54s migmigration_controller Step: 6/47
Normal Running 52s (x2 over 53s) migmigration_controller Step: 7/47
Normal Running 51s (x2 over 51s) migmigration_controller Step: 8/47
Normal Ready 50s (x12 over 57s) migmigration_controller The migration is ready.
Normal Running 50s migmigration_controller Step: 9/47
Normal Running 50s migmigration_controller Step: 10/47
您可以使用 Migration Toolkit for Containers(MTC)迁移组成应用程序状态的持久性卷声明(PVC),执行可重复的、仅状态的迁移。您可以通过从迁移计划中排除其他 PVC 来迁移指定的 PVC。您可以映射 PVC 以确保源和目标 PVC 同步。持久性卷 (PV) 数据复制到目标集群。PV 引用不会被移动,应用程序 pod 将继续在源集群中运行。
State 迁移专门设计用于外部 CD 机制,如 OpenShift Gitops。在使用 MTC 迁移状态时,您可以使用 GitOps 迁移应用程序清单。
如果您有 CI/CD 管道,您可以通过在目标集群中部署无状态组件来迁移它们。然后,您可以使用 MTC 迁移有状态组件。
您可以在集群间或同一集群中执行状态迁移。
状态迁移仅迁移构成应用状态的组件。如果要迁移整个命名空间,请使用 stage 或 cutover migration。
源集群中的应用程序状态在通过
PersistentVolumeClaims
置备的
PersistentVolume
中保留。
应用程序的清单在中央存储库中可用,它们同时可从源和目标集群访问。
将持久性卷数据从源迁移到目标集群。
您可以根据需要多次执行此步骤。源应用程序继续运行。
静止源应用程序。
您可以通过在源集群上直接将工作负载资源副本设置为
0
来完成此操作,或者更新 GitHub 中的清单并重新同步 Argo CD 应用程序。
将应用程序清单克隆到目标集群。
您可以使用 Argo CD 将应用程序清单克隆到目标集群。
将剩余的卷数据从源迁移到目标集群。
通过执行最终数据迁移,在状态迁移过程中迁移应用程序创建的任何新数据。
如果克隆的应用程序处于静默状态,请取消静止它。
将 DNS 记录切换到目标集群,将用户流量重新定向到已迁移的应用程序。
在执行状态迁移时,MTC 1.6 无法自动静止应用程序。它只能迁移 PV 数据。因此,您必须使用 CD 机制来静止或取消静止应用程序。
MTC 1.7 引入了明确的 Stage 和 Cutover 流。您可以根据需要,使用暂存来执行初始数据传输。然后,您可以执行一个可自动静止源应用程序。
请参阅
将 PVC 从迁移中排除
以选择 PVC。
请参阅
映射 PVC
,将源 PV 数据迁移到目标集群上置备的 PVC。
请参阅
迁移 Kubernetes 对象
以迁移组成应用程序状态的 Kubernetes 对象。
您可以在单个迁移计划中添加最多四个迁移 hook,每个 hook 在迁移过程的不同阶段运行。迁移 hook 执行的任务包括自定义应用程序默认、手动迁移不受支持的数据类型以及在迁移后更新应用程序。
迁移 hook 会在以下迁移步骤之一中,在源或目标集群上运行:
PreBackup
:在源集群中备份资源前。
PostBackup
:在源集群中备份资源后。
PreRestore
:在目标集群上恢复资源前。
PostRestore
:在目标集群中恢复资源后。
您可以通过创建使用默认 Ansible 镜像运行的 Ansible playbook 或者使用自定义 hook 容器来创建 hook。
您可以在
MigPlan
自定义资源 (CR) 中排除、编辑和映射组件。
您可以从 MTC 迁移计划中排除资源,如镜像流、持久性卷(PV)或订阅,以便减少迁移的资源负载,或使用其他工具迁移镜像或 PV。
默认情况下,MTC 会排除服务目录资源和 Operator Lifecycle Manager(OLM)资源。这些资源是服务目录 API 组和 OLM API 组的一部分,目前还不支持迁移。
编辑
MigrationController
自定义资源清单:
$ oc edit migrationcontroller <migration_controller> -n openshift-migration
-
通过添加参数以排除特定资源,更新
spec
部分。对于没有自己的排除参数的资源,请添加
additional_excluded_resources
参数:
apiVersion: migration.openshift.io/v1alpha1
kind: MigrationController
metadata:
name: migration-controller
namespace: openshift-migration
spec:
disable_image_migration: true 1
disable_pv_migration: true 2
additional_excluded_resources: 3
- resource1
- resource2
...
-
1
-
添加
disable_image_migration: true
以排除迁移中的镜像流。当
MigrationController
pod 重启时,
镜像流
会添加到
main.yml
中的
exclude_resources
列表中。
添加
disable_pv_migration: true
以将 PV 排除在迁移计划之外。当
MigrationController
pod 重启时,
persistentvolumes
和
persistentvolumeclaims
会添加到
main.yml
中的
exclude_resources
列表中。禁用 PV 迁移会同时在创建迁移计划时禁用 PV 发现功能。
您可以添加要在
additional_excluded_resources
列表中排除的 OpenShift Container Platform 资源。
等待两分钟,使
MigrationController
Pod 重启,以便应用更改。
验证资源是否排除:
$ oc get deployment -n openshift-migration migration-controller -o yaml | grep EXCLUDED_RESOURCES -A1
输出包含排除的资源:
name: EXCLUDED_RESOURCES
value:
resource1,resource2,imagetags,templateinstances,clusterserviceversions,packagemanifests,subscriptions,servicebrokers,servicebindings,serviceclasses,serviceinstances,serviceplans,imagestreams,persistentvolumes,persistentvolumeclaims
如果您在
MigPlan
自定义资源 (CR) 中映射命名空间,您必须确保在源或目标集群上不会重复命名空间,因为命名空间的 UID 和 GID 范围在迁移过程中被复制。
您可以通过排除您不想迁移的 PVC 来为状态迁移选择持久性卷声明 (PVC)。您可以通过在持久性卷(PV)被发现后设置
MigPlan
自定义资源(CR)的
spec.persistentVolumes.pvc.selection.action
参数来排除 PVC。
MigPlan
CR 处于
Ready
状态。
将
spec.persistentVolumes.pvc.selection.action
参数添加到
MigPlan
CR 中,并将其设置为
skip
:
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
name: <migplan>
namespace: openshift-migration
spec:
persistentVolumes:
- capacity: 10Gi
name: <pv_name>
selection:
action: skip
您可以通过映射 PVC,将持久性卷(PV)数据从源集群迁移到
MigPlan
CR 中目标集群中已置备的持久性卷声明(PVC)。此映射可确保迁移的应用的目标 PVC 与源 PVC 同步。
您可以在 PV 被发现后,通过更新
MigPlan
自定义资源(CR)中的
spec.persistentVolumes.pvc.name
参数来映射 PVC。
MigPlan
CR 处于
Ready
状态。
更新
MigPlan
CR 中的
spec.persistentVolumes.pvc.name
参数:
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
name: <migplan>
namespace: openshift-migration
spec:
persistentVolumes:
- capacity: 10Gi
name: <pv_name>
name: <source_pvc>:<destination_pvc> 1
-
1
-
指定源集群上的 PVC 和目标集群上的 PVC。如果目标 PVC 不存在,则会创建它。您可以在迁移过程中使用此映射更改 PVC 名称。
创建
MigPlan
自定义资源(CR)后,
MigrationController
CR 会发现持久性卷(PV)。
spec.persistentVolumes
块和
status.destStorageClasses
块添加到
MigPlan
CR 中。
您可以编辑
spec.persistentVolumes.selection
块中的值。如果您更改了
spec.persistentVolumes.selection
块以外的值,当
MigrationController
CR 协调
MigPlan
CR 时这些值会被覆盖。
spec.persistentVolumes.selection.storageClass
参数的默认值由以下逻辑决定:
如果源集群 PV 是 Gluster 或 NFS,则默认为
cephfs
,用于
accessMode: ReadWriteMany
或
cephrbd
,表示
accessMode: ReadWriteOnce
。
如果 PV 既不是 Gluster,也不是 NFS,
或
cephfs
或
cephrbd
不可用,则默认为同一调配器的存储类。
如果没有同一置备程序存储类,则默认是目标集群的默认存储类。
您可以将
storageClass
值改为
MigPlan
CR 的
status.destStorageClasses
块中任何
name
参数的值。
如果
storageClass
值为空,则 PV 在迁移后将没有存储类。例如,当您想要将 PV 移到目标集群上的 NFS 卷时,这个选项是合适的。
MigPlan
CR 处于
Ready
状态。
编辑
MigPlan
CR 中的
spec.persistentVolumes.selection
值:
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
name: <migplan>
namespace: openshift-migration
spec:
persistentVolumes:
- capacity: 10Gi
name: pvc-095a6559-b27f-11eb-b27f-021bddcaf6e4
proposedCapacity: 10Gi
accessModes:
- ReadWriteMany
hasReference: true
name: mysql
namespace: mysql-persistent
selection:
action: <copy> 1
copyMethod: <filesystem> 2
verify: true 3
storageClass: <gp2> 4
accessMode: <ReadWriteMany> 5
storageClass: cephfs
-
1
-
允许的值包括
move
、
copy
和
skip
。如果只支持一个操作,则默认值是支持的动作。如果支持多个操作,则默认值为
copy
。
允许的值是
snapshot
和
filesystem
。默认值为
filesystem
。
如果您在 MTC web 控制台中为文件系统复制选择了验证选项,则会显示
verify
参数。您可以将其设置为
false
。
您可以将默认值改为
MigPlan
CR 的
status.destStorageClasses
块中任何
name
参数的值。如果没有指定值,则 PV 在迁移后没有存储类。
允许的值有
ReadWriteOnce
和
ReadWriteMany
。如果没有指定这个值,则默认值是源集群 PVC 的访问模式。您只能在
MigPlan
CR 中编辑访问模式。您不能使用 MTC web 控制台进行编辑。
9.4.6. 转换 MTC web 控制台中的存储类
您可以在同一个集群中迁移持久性卷(PV)的存储类来转换它。要做到这一点,您必须在 Migration Toolkit for Containers(MTC)web 控制台中创建并运行迁移计划。
您必须在 MTC 的集群中以具有
cluster-admin
权限的用户身份登录。
您必须在 MTC web 控制台中添加集群。
在 OpenShift Container Platform Web 控制台的左侧导航窗格中,点
Projects
。
在项目列表中点击您的项目。
此时会打开
Project 详情
页面。
点
DeploymentConfig
名称。记录其正在运行的 Pod 的名称。
打开项目的 YAML 选项卡。查找 PV 并记下其对应的持久性卷声明(PVC)的名称。
在 MTC web 控制台中点
Migration Plan
。
点
Add migration plan
。
输入
Plan 名称
。
迁移计划名称必须包含 3 到 63 个小写字母数字字符(
a-z,0-9
)且不得包含空格或下划线(
_
)。
在
Migration type
菜单中,选择
Storage class conversion
。
从
Source 集群
列表中,选择所需的集群进行存储类转换。
点击
Next
。
Namespaces
页面将打开。
选择所需的项目。
点击
Next
。
此时会打开
Persistent volumes
页面。页面中显示项目中 PV,默认选中的所有 PV。
对于每个 PV,选择所需的目标存储类。
点击
Next
。
该向导会验证新的迁移计划,并显示它已就绪。
单击
Close
。
新计划会出现在
Migration Plan
页面中。
要开始转换,请点击新计划的选项菜单。
在
Migrations
下会显示两个选项,即
Stage
和
Cutover
。
在应用程序中剪切迁移更新 PVC 引用。
阶段迁移不会更新应用程序中的 PVC 引用。
选择所需选项。
根据您选择的选项,显示
Stage migration
或
Cutover migration
通知。
点
Migrate
。
根据您选择的选项,
Stage started
或
Cutover started
消息会显示。
要查看当前迁移的状态,请点击
Migrations
列中的数量。
此时会打开
Migrations
页面。
要查看有关当前迁移和监控其进度的更多详细信息,请从
Type
列选择迁移。
此时会打开
Migration 详情
页面。当迁移进入 DirectVolume 步骤时,步骤的状态将变为
Running Rsync Pods to migrate Persistent Volume data
,您可以点
View details
并查看副本的详细状态。
在面包屑导航栏中,点
Stage
或
Cutover
,并等待所有步骤完成。
打开 OpenShift Container Platform Web 控制台的
PersistentVolumeClaims
选项卡。
您可以看到新 PVC 名称,但以
new
结尾(使用目标存储类)。
在左侧导航窗格中,点
Pods
。查看您的项目的 pod 已再次运行。
有关
move
和
copy
操作的详情,请参考
MTC 工作流
。
有关
skip
操作的详情,请参阅
从迁移中排除 PVC
。
有关文件系统和快照复制方法的详情,请参阅
关于数据复制方法
。
9.4.7. 使用 MTC API 执行 Kubernetes 对象的状态迁移
迁移所有 PV 数据后,您可以使用 Migration Toolkit for Containers (MTC) API 执行组成应用程序的 Kubernetes 对象的一次性状态迁移。
您可以通过配置
MigPlan
自定义资源 (CR) 字段来提供一个带有额外标签选择器的 Kubernetes 资源列表来进一步过滤这些资源,然后通过创建
MigMigration
CR 来执行迁移。
MigPlan
资源在迁移后关闭。
选择 Kubernetes 资源是一个仅限 API 的功能。您必须更新
MigPlan
CR,并使用 CLI 为它创建一个
MigMigration
CR。MTC web 控制台不支持迁移 Kubernetes 对象。
迁移后,
MigPlan
CR 的
closed
参数被设置为
true
。您不能为此
MigPlan
CR 创建另一个
MigMigration
CR。
使用以下选项之一将 Kubernetes 对象添加到
MigPlan
CR 中:
将 Kubernetes 对象添加到
includeResources
部分。当
MigPlan
CR 中指定
includedResources
字段时,计划会将
group-kind
的列表作为输入。只有列表中显示的资源才会包含在迁移中。
添加可选的
labelSelector
参数,以过滤
MigPlan
中的
includedResources
。当指定此字段时,迁移中仅包含与标签选择器匹配的资源。例如,您可以使用标签
app: frontend
作为过滤器来过滤
Secret
和
ConfigMap
资源列表。
更新
MigPlan
CR,使其包含 Kubernetes 资源,并可选择性地通过添加
labelSelector
参数来过滤包含的资源:
更新
MigPlan
CR 使其包含 Kubernetes 资源:
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
name: <migplan>
namespace: openshift-migration
spec:
includedResources:
- kind: <kind> 1
group: ""
- kind: <kind>
group: ""
-
1
-
指定 Kubernetes 对象,如
Secret
或
ConfigMap
。
可选:要通过添加
labelSelector
参数来过滤包含的资源:
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
name: <migplan>
namespace: openshift-migration
spec:
includedResources:
- kind: <kind> 1
group: ""
- kind: <kind>
group: ""
labelSelector:
matchLabels:
<label> 2
-
1
-
指定 Kubernetes 对象,如
Secret
或
ConfigMap
。
指定要迁移的资源标签,如
app: frontend
。
创建一个
MigMigration
CR 来迁移所选 Kubernetes 资源。验证
migPlanRef
引用了了正确的
MigPlan
:
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
generateName: <migplan>
namespace: openshift-migration
spec:
migPlanRef:
name: <migplan>
namespace: openshift-migration
stage: false
您可以编辑迁移计划限制,启用持久性卷大小,或者在
MigrationController
自定义资源 (CR) 中启用缓存的 Kubernetes 客户端,以用于大型迁移并提高性能。
您可以使用 MTC 为大型迁移增加迁移对象和容器资源的限制。
您必须在生产环境中执行迁移前测试这些更改。
编辑
MigrationController
自定义资源(CR)清单:
$ oc edit migrationcontroller -n openshift-migration
-
更新以下参数:
mig_controller_limits_cpu: "1"
1
mig_controller_limits_memory: "10Gi"
2
mig_controller_requests_cpu: "100m"
3
mig_controller_requests_memory: "350Mi"
4
mig_pv_limit: 100
5
mig_pod_limit: 100
6
mig_namespace_limit: 10
7
...
-
1
-
指定
MigrationController
CR 可用的 CPU 数量。
指定
MigrationController
CR 可用的内存量。
指定可用于
MigrationController
CR 请求的 CPU 单元数。
100m
代表 0.1 CPU 单元(100 * 1e-3)。
指定可用于
MigrationController
CR 请求的内存量。
指定可迁移的持久性卷数量。
指定可迁移的 pod 数量。
指定可迁移的命名空间数量。
创建使用更新的参数验证更改的迁移计划。
如果您的迁移计划超过
MigrationController
CR 限制,则 MTC 控制台在保存迁移计划时会显示警告信息。
您可以启用持久性卷(PV)调整直接卷迁移的大小,以避免在目标集群中耗尽磁盘空间。
当 PV 的磁盘用量达到配置级别时,
MigrationController
自定义资源(CR)会将持久性卷声明(PVC)的请求存储容量与其实际置备的容量进行比较。然后,它会计算目标集群所需的空间。
pv_resizing_threshold
参数决定何时使用 PV 调整大小。默认阈值是
3%
。这意味着,当 PV 的磁盘用量超过
97%
时,PV 会调整大小。您可以提高这个阈值,以便 PV 调整大小在较低的磁盘用量级别上发生。
PVC 容量根据以下标准计算:
如果 PVC 请求的存储容量(
spec.resources.requests.storage
)不等于实际置备的容量(
status.capacity.storage
),则会使用较大的值。
如果 PV 通过 PVC 置备,然后更改以便其 PV 和 PVC 容量不再匹配,则会使用较大的值。
PVC 必须附加到一个或多个正在运行的 pod,以便
MigrationController
CR 可以执行命令。
登录主机集群。
通过修补
MigrationController
CR 来启用 PV 调整大小:
$ oc patch migrationcontroller migration-controller -p '{"spec":{"enable_dvm_pv_resizing":true}}' \ 1
--type='merge' -n openshift-migration
-
1
-
将值设为
false
可禁用 PV 大小调整。
可选:更新
pv_resizing_threshold
参数以增加阈值:
$ oc patch migrationcontroller migration-controller -p '{"spec":{"pv_resizing_threshold":41}}' \ 1
--type='merge' -n openshift-migration
-
1
-
默认值为
3
。
超过阈值时,
MigPlan
CR 状态中会显示以下状态信息:
status:
conditions:
- category: Warn
durable: true
lastTransitionTime: "2021-06-17T08:57:01Z"
message: 'Capacity of the following volumes will be automatically adjusted to avoid disk capacity issues in the target cluster: [pvc-b800eb7b-cf3b-11eb-a3f7-0eae3e0555f3]'
reason: Done
status: "False"
type: PvCapacityAdjustmentRequired
对于 AWS gp2 存储,因为 gp2 计算卷用量和大小的方式,这个信息不会出现,除非
pv_resizing_threshold
为 42% 或更高。(
BZ#1973148
)
9.5.3. 启用缓存的 Kubernetes 客户端
您可以在
MigrationController
自定义资源(CR)中启用缓存的 Kubernetes 客户端,以便在迁移过程中提高性能。在位于不同区域的集群之间迁移时,或存在显著的网络延迟时,会显示最大的性能优势。
但是,委派的任务(例如,用于直接卷迁移的 Rsync 备份或 Velero 备份和恢复)并不会显著提高通过缓存的客户端的性能。
缓存的客户端需要额外的内存,因为
MigrationController
CR 会缓存与
MigCluster
CR 交互所需的所有 API 资源。通常发送到 API 服务器的请求会被定向到缓存。缓存会监视 API 服务器是否有更新。
如果启用了缓存的客户端后发生
OOMKilled
错误,您可以增加
MigrationController
CR 的内存限值和请求。
运行以下命令启用缓存的客户端:
$ oc -n openshift-migration patch migrationcontroller migration-controller --type=json --patch \
'[{ "op": "replace", "path": "/spec/mig_controller_enable_cache", "value": true}]'
-
可选:运行以下命令来增加
MigrationController
CR 内存限值:
$ oc -n openshift-migration patch migrationcontroller migration-controller --type=json --patch \
'[{ "op": "replace", "path": "/spec/mig_controller_limits_memory", "value": <10Gi>}]'
-
可选:运行以下命令来增加
MigrationController
CR 内存请求:
$ oc -n openshift-migration patch migrationcontroller migration-controller --type=json --patch \
'[{ "op": "replace", "path": "/spec/mig_controller_requests_memory", "value": <350Mi>}]'
本节论述了对 Migration Toolkit for Containers(MTC)进行故障排除的资源。
有关已知问题,请参阅
MTC 发行注记
。
您可以使用 MTC web 控制台或 Kubernetes API 将 Kubernetes 资源、持久性卷数据和内部容器镜像迁移到 OpenShift Container Platform 4.15。
MTC 迁移以下资源:
在迁移计划中指定的命名空间。
命名空间范围的资源:当 MTC 迁移命名空间时,它会迁移与该命名空间关联的所有对象和资源,如服务或 Pod。另外,如果一个资源在命名空间中存在但不在集群级别,这个资源依赖于集群级别存在的另外一个资源,MTC 会迁移这两个资源。
例如,安全性上下文约束(SCC)是一个存在于集群级别的资源,服务帐户(SA)是存在于命名空间级别的资源。如果 MTC 迁移的命名空间中存在 SA,MTC 会自动找到链接到 SA 的所有 SCC,并迁移这些 SCC。同样,MTC 会迁移链接到命名空间持久性卷声明的持久性卷。
根据资源,可能需要手动迁移集群范围的资源。
自定义资源 (CR) 和自定义资源定义 (CRD):MTC 在命名空间级别自动迁移 CR 和 CRD。
使用 MTC Web 控制台迁移应用程序涉及以下步骤:
在所有集群中安装 MTC Operator。
您可以在有限的或没有互联网访问的受限环境中为 Containers Operator 安装 Migration Toolkit。源和目标集群必须可以在相互间进行访问,而需要可以访问 registry 的镜像(mirror).
配置复制存储库,这是 MTC 用来迁移数据的中间对象存储。
源和目标集群必须有对复制仓库的不受限制的网络访问权限。如果使用代理服务器,您必须将其配置为允许复制仓库和集群间的网络流量。
在 MTC web 控制台中添加源集群。
在 MTC web 控制台中添加复制存储库。
创建迁移计划,包含以下数据迁移选项之一:
Copy
:MTC 将数据从源集群复制到复制存储库,再从复制存储库把数据复制到目标集群。
如果您使用直接镜像迁移或直接卷迁移,则镜像或卷会直接从源集群复制到目标集群。
Move
:MTC 从源集群中卸载一个远程卷(例如 NFS),在目标集群上创建一个指向这个远程卷的 PV 资源,然后在目标集群中挂载远程卷。在目标集群中运行的应用程序使用源集群使用的同一远程卷。远程卷必须可以被源集群和目标集群访问。
虽然复制仓库没有出现在此图表中,但迁移需要它。
运行迁移计划,使用以下选项之一:
stage
在不停止应用程序的情况下将数据复制到目标集群。
阶段迁移可以多次运行,以便在迁移前将大多数数据复制到目标。运行一个或多个阶段迁移可缩短迁移的持续时间。
cutover
会停止源集群上的应用程序,并将资源移到目标集群。
可选:您可以清除
Halt transactions on the source cluster during migration
多选设置。
关于 MTC 自定义资源
MTC 会创建以下自定义资源(CR):
MigCluster
(配置, MTC 集群): 集群定义
MigStorage
(配置, MTC 集群): 存储定义
MigPlan
(配置, MTC 集群): 迁移计划
MigPlan
CR 描述了要迁移的源和目标集群、复制仓库和命名空间。它与 0 个、1 个或多个
MigMigration
CR 关联。
删除
MigPlan
CR 会删除关联的
MigMigration
CR。
BackupStorageLocation
(配置, MTC 集群):
Velero
备份对象的位置
VolumeSnapshotLocation
(配置, MTC 集群):
Velero
卷快照的位置
MigMigration
(操作,MTC 集群):Migration,在每次进行 stage 或迁移数据时创建。每个
MigMigration
CR 都与
MigPlan
CR 关联。
Backup
(操作,源集群):当运行迁移计划时,
MigMigration
CR 在每个源集群上创建两个
Velero
备份 CR:
备份 CR #1 用于Kubernetes 对象
备份 CR #2 用于 PV 数据
Restore
(操作,目标集群):在运行迁移计划时,
MigMigration
CR 在目标集群上创建两个
Velero
恢复 CR:
恢复 CR #1(使用备份 CR #2)用于 PV 数据
恢复 CR #2(使用备份 CR #1)用于 Kubernetes 对象
MTC 使用以下自定义资源(CR)清单来迁移应用程序。
10.2.1. DirectImageMigration
DirectImageMigration
CR 直接将镜像从源集群复制到目标集群。
apiVersion: migration.openshift.io/v1alpha1
kind: DirectImageMigration
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <direct_image_migration>
spec:
srcMigClusterRef:
name: <source_cluster>
namespace: openshift-migration
destMigClusterRef:
name: <destination_cluster>
namespace: openshift-migration
namespaces: 1
- <source_namespace_1>
- <source_namespace_2>:<destination_namespace_3> 2
-
1
-
包含要迁移的镜像的一个或多个命名空间。默认情况下,目标命名空间的名称与源命名空间相同。
使用不同名称映射到目标命名空间的源命名空间。
10.2.2. DirectImageStreamMigration
DirectImageStreamMigration
CR 直接将镜像流引用从源集群复制到目标集群。
apiVersion: migration.openshift.io/v1alpha1
kind: DirectImageStreamMigration
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <direct_image_stream_migration>
spec:
srcMigClusterRef:
name: <source_cluster>
namespace: openshift-migration
destMigClusterRef:
name: <destination_cluster>
namespace: openshift-migration
imageStreamRef:
name: <image_stream>
namespace: <source_image_stream_namespace>
destNamespace: <destination_image_stream_namespace>
10.2.3. DirectVolumeMigration
DirectVolumeMigration
CR 直接将持久性卷(PV)从源集群复制到目标集群。
apiVersion: migration.openshift.io/v1alpha1
kind: DirectVolumeMigration
metadata:
name: <direct_volume_migration>
namespace: openshift-migration
spec:
createDestinationNamespaces: false 1
deleteProgressReportingCRs: false 2
destMigClusterRef:
name: <host_cluster> 3
namespace: openshift-migration
persistentVolumeClaims:
- name: <pvc> 4
namespace: <pvc_namespace>
srcMigClusterRef:
name: <source_cluster>
namespace: openshift-migration
-
1
-
设置为
true
,为目标集群上的 PV 创建命名空间。
设置为
true
,以在迁移后删除
DirectVolumeMigrationProgress
CR。默认值为
false
,保留
DirectVolumeMigrationProgress
CR 以进行故障排除。
如果目标集群不是主机集群,请更新集群名称。
指定要迁移的一个或多个 PVC。
10.2.4. DirectVolumeMigrationProgress
DirectVolumeMigrationProgress
CR 显示
DirectVolumeMigration
CR 的进度。
apiVersion: migration.openshift.io/v1alpha1
kind: DirectVolumeMigrationProgress
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <direct_volume_migration_progress>
spec:
clusterRef:
name: <source_cluster>
namespace: openshift-migration
podRef:
name: <rsync_pod>
namespace: openshift-migration
MigAnalytic
CR 从关联的
MigPlan
CR 收集镜像、Kubernetes 资源和持久性卷(PV)容量的数量。
您可以配置它收集的数据。
apiVersion: migration.openshift.io/v1alpha1
kind: MigAnalytic
metadata:
annotations:
migplan: <migplan>
name: <miganalytic>
namespace: openshift-migration
labels:
migplan: <migplan>
spec:
analyzeImageCount: true 1
analyzeK8SResources: true 2
analyzePVCapacity: true 3
listImages: false 4
listImagesLimit: 50 5
migPlanRef:
name: <migplan>
namespace: openshift-migration
-
1
-
可选:返回镜像数量。
可选:返回 Kubernetes 资源的数量、类型和 API 版本。
可选:返回 PV 容量。
返回镜像名称列表。默认为
false
,因此输出不会过长。
可选:指定如果
listImages
为
true
时要返回的最大镜像名称数。
MigCluster
CR 定义一个主机、本地或远程集群。
apiVersion: migration.openshift.io/v1alpha1
kind: MigCluster
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <host_cluster> 1
namespace: openshift-migration
spec:
isHostCluster: true 2
# The 'azureResourceGroup' parameter is relevant only for Microsoft Azure.
azureResourceGroup: <azure_resource_group> 3
caBundle: <ca_bundle_base64> 4
insecure: false 5
refresh: false 6
# The 'restartRestic' parameter is relevant for a source cluster.
restartRestic: true 7
# The following parameters are relevant for a remote cluster.
exposedRegistryPath: <registry_route> 8
url: <destination_cluster_url> 9
serviceAccountSecretRef:
name: <source_secret> 10
namespace: openshift-config
-
1
-
如果
migration-controller
pod 没有在这个集群中运行,请更新集群名称。
如果为
true
,则
migration-controller
pod 在此集群中运行。
仅 Microsoft Azure:指定资源组。
可选:如果您为自签名 CA 证书创建了一个证书捆绑包,且
insecure
参数值为
false
,请指定 base64 编码的证书捆绑包。
设置为
true
以禁用 SSL 验证。
设置为
true
以验证集群。
设置为
true
,以在创建
Stage
pod 后重启源集群中的
Restic
pod。
远程集群和直接镜像迁移:指定公开的安全 registry 路径。
仅远程集群:指定 URL。
仅远程集群:指定
Secret
对象的名称。
MigHook
CR 定义一个迁移 hook,它在迁移的指定阶段运行自定义代码。您可以创建最多四个迁移 hook。每个 hook 在迁移的不同阶段运行。
您可以配置 hook 名称、运行时持续时间、自定义镜像,以及 hook 将运行的集群。
hook 的迁移阶段和命名空间在
MigPlan
CR 中配置。
apiVersion: migration.openshift.io/v1alpha1
kind: MigHook
metadata:
generateName: <hook_name_prefix> 1
name: <mighook> 2
namespace: openshift-migration
spec:
activeDeadlineSeconds: 1800 3
custom: false 4
image: <hook_image> 5
playbook: <ansible_playbook_base64> 6
targetCluster: source 7
-
1
-
可选:此参数的值后附加一个唯一的哈希值,以便每个迁移 hook 都有一个唯一的名称。您不需要指定
name
参数的值。
指定迁移 hook 名称,除非指定了
generateName
参数的值。
可选:指定 hook 可运行的最大秒数。默认值为
1800
。
如果为
true
,则 hook 是一个自定义镜像。自定义镜像可以包括 Ansible,也可以使用不同的编程语言编写。
指定自定义镜像,例如
quay.io/konveyor/hook-runner:latest
。如果
custom
是
true
,则需要此项。
base64 编码的 Ansible playbook.如果
custom
是
false
,则必需。
指定要运行 hook 的集群。有效值为
source
或
destination
。
MigMigration
CR 运行一个
MigPlan
CR。
您可以配置
Migmigration
CR,以运行一个阶段或增量迁移,取消正在进行中的迁移,或回滚已完成的迁移。
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <migmigration>
namespace: openshift-migration
spec:
canceled: false 1
rollback: false 2
stage: false 3
quiescePods: true 4
keepAnnotations: true 5
verify: false 6
migPlanRef:
name: <migplan>
namespace: openshift-migration
-
1
-
设置为
true
可取消正在进行中的迁移。
设置为
true
以回滚已完成的迁移。
设置为
true
以运行暂存迁移。数据会被递增复制,pod 不会在源集群中停止。
设置为
true
可在迁移期间停止应用程序。在
备份
阶段后,源集群中的 pod 被缩减为
0
。
设置为
true
以保留迁移过程中应用的标签和注解。
设置为
true
,以检查目标集群中迁移的 pod 的状态,并返回处于
Running
状态的 pod 名称。
MigPlan
CR 定义迁移计划的参数。
您可以配置目标命名空间、hook 阶段以及直接或间接迁移。
默认情况下,目标命名空间的名称与源命名空间相同。如果配置了一个不同的目标命名空间,您必须确保不会在源或目标集群上重复命名空间,因为在迁移过程中复制了 UID 和 GID 范围。
apiVersion: migration.openshift.io/v1alpha1
kind: MigPlan
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <migplan>
namespace: openshift-migration
spec:
closed: false 1
srcMigClusterRef:
name: <source_cluster>
namespace: openshift-migration
destMigClusterRef:
name: <destination_cluster>
namespace: openshift-migration
hooks: 2
- executionNamespace: <namespace> 3
phase: <migration_phase> 4
reference:
name: <hook> 5
namespace: <hook_namespace> 6
serviceAccount: <service_account> 7
indirectImageMigration: true 8
indirectVolumeMigration: false 9
migStorageRef:
name: <migstorage>
namespace: openshift-migration
namespaces:
- <source_namespace_1> 10
- <source_namespace_2>
- <source_namespace_3>:<destination_namespace_4> 11
refresh: false 12
-
1
-
如果为
true
,则迁移已完成。您不能为此
MigPlan
CR 创建另一个
MigMigration
CR。
可选:最多可指定四个迁移 hook。每个 hook 必须在不同的迁移阶段运行。
可选:指定运行 hook 的命名空间。
可选:指定 hook 运行期间的迁移阶段。一个 hook 可以分配给一个阶段。有效值为
PreBackup
、
PostBackup
、
PreRestore
和
PostRestore
。
可选:指定
MigHook
CR 的名称。
可选:指定
MigHook
CR 的命名空间。
可选:指定一个具有
cluster-admin
权限的服务帐户。
如果为
true
,则禁用直接镜像迁移。镜像从源集群复制到复制存储库,并从复制存储库复制到目标集群。
如果为
true
,则禁用直接卷迁移。PV 从源集群复制到复制存储库,再从复制存储库复制到目标集群。
指定一个或多个源命名空间。如果只指定源命名空间,则目标命名空间是相同的。
如果目标命名空间与源命名空间不同,请指定它。
如果为
true
,
MigPlan
CR 会被验证。
MigStorage
CR 描述了复制存储库的对象存储。
支持 Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Storage、Multi-Cloud Object Gateway 和通用 S3 兼容云存储。
AWS 和快照复制方法具有额外的参数。
apiVersion: migration.openshift.io/v1alpha1
kind: MigStorage
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <migstorage>
namespace: openshift-migration
spec:
backupStorageProvider: <backup_storage_provider> 1
volumeSnapshotProvider: <snapshot_storage_provider> 2
backupStorageConfig:
awsBucketName: <bucket> 3
awsRegion: <region> 4
credsSecretRef:
namespace: openshift-config
name: <storage_secret> 5
awsKmsKeyId: <key_id> 6
awsPublicUrl: <public_url> 7
awsSignatureVersion: <signature_version> 8
volumeSnapshotConfig:
awsRegion: <region> 9
credsSecretRef:
namespace: openshift-config
name: <storage_secret> 10
refresh: false 11
-
1
-
指定存储供应商。
仅快照复制方法:指定存储供应商。
仅 AWS:指定存储桶名称。
仅 AWS:指定存储桶区域,如
us-east-1
。
指定您为存储创建的
Secret
对象的名称。
仅 AWS:如果您使用 AWS 密钥管理服务,请指定该密钥的唯一标识符。
仅 AWS:如果授予 AWS 存储桶的公共访问权限,请指定存储桶 URL。
仅 AWS:指定向存储桶验证请求的 AWS 签名版本,例如
4
。
仅快照复制方法:指定集群的地理位置。
仅快照复制方法:指定您为存储创建的
Secret
对象的名称。
设置为
true
以验证集群。
本节介绍在迁移过程中可能导致问题的常见问题。
如果直接卷迁移未完成,则目标集群可能没有与源集群相同的
node-selector
注解。
MTC 在迁移命名空间时会保留所有注解,以保持安全性上下文约束和调度要求。在直接卷迁移过程中,MTC 在从源集群迁移的命名空间中在目标集群上创建 Rsync 传输 pod。如果目标集群命名空间没有与源集群命名空间相同的注解,则无法调度 Rsync 传输 pod。Rsync pod 处于
Pending
状态。
您可以执行以下步骤识别并解决这个问题。
检查
MigMigration
CR 的状态:
$ oc describe migmigration <pod> -n openshift-migration
输出包括以下状态消息:
Some or all transfer pods are not running for more than 10 mins on destination cluster
在源集群中,获取迁移的命名空间的详情:
$ oc get namespace <namespace> -o yaml 1
-
1
-
指定迁移的命名空间。
在目标集群中,编辑迁移的命名空间:
$ oc edit namespace <namespace>
-
将缺少的
openshift.io/node-selector
注解添加到迁移的命名空间中,如下例所示:
apiVersion: v1
kind: Namespace
metadata:
annotations:
openshift.io/node-selector: "region=east"
再次运行迁移计划。
本节论述了您可能会在 Migration Toolkit for Containers(MTC)中遇到的常见错误消息,以及如何解决其底层原因。
10.4.2.1. 首次访问 MTC 控制台时显示的 CA 证书错误
如果在第一次尝试访问 MTC 控制台时显示
CA 证书错误
信息,则可能的原因是在一个集群中使用自签名的 CA 证书。
要解决这个问题,进入出错信息中显示的
oauth-authorization-server
URL 并接受证书。要永久解决这个问题,将证书添加到网页浏览器的信任存储中。
如果您接受证书后显示
Unauthorized
信息,进入 MTC 控制台并刷新网页。
10.4.2.2. MTC 控制台中的 OAuth 超时错误
如果在接受自签名证书后,MTC 控制台中显示
connection has timed out
,其原因可能是:
对 OAuth 服务器的网络访问中断
对 OpenShift Container Platform 控制台的网络访问中断
代理配置中阻断了对
oauth-authorization-server
URL 的访问。详情请查看
因为 OAuth 超时错误而无法访问 MTC 控制台
。
要确定超时的原因:
使用浏览器 web 检查器检查 MTC 控制台网页。
检查
Migration UI
pod 日志中的错误。
如果您使用自签名证书来保护集群或 MTC 的 Migration Toolkit 的复制仓库的安全,则证书验证可能会失败,并显示以下错误消息:
Certificate signed by unknown authority
。
您可以创建自定义 CA 证书捆绑包文件,并在添加集群或复制存储库时将其上传到 MTC web 控制台。
从远程端点下载 CA 证书,并将其保存为 CA 捆绑包文件:
$ echo -n | openssl s_client -connect <host_FQDN>:<port> \ 1
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <ca_bundle.cert> 2
-
1
-
指定端点的主机 FQDN 和端口,如
api.my-cluster.example.com:6443
。
指定 CA 捆绑包文件的名称。
10.4.2.4. 在 Velero pod 日志中有备份存储位置错误
如果
Velero
Backup
自定义资源包含对不存在的备份存储位置(BSL)的引用,
Velero
pod 日志可能会显示以下错误消息:
$ oc logs <Velero_Pod> -n openshift-migration
10.4.2.5. Velero pod 日志中的 Pod 卷备份超时错误
如果因为 Restic 超时造成迁移失败,以下错误会在
Velero
pod 日志中显示。
level=error msg="Error backing up item" backup=velero/monitoring error="timed out waiting for all PodVolumeBackups to complete" error.file="/go/src/github.com/heptio/velero/pkg/restic/backupper.go:165" error.function="github.com/heptio/velero/pkg/restic.(*backupper).BackupPodVolumes" group=v1
restic_timeout
的默认值为一小时。您可以为大型迁移增加这个参数值,请注意,高的值可能会延迟返回出错信息。
在 OpenShift Container Platform web 控制台中导航至
Operators
→
Installed Operators
。
点
Migration Toolkit for Containers Operator
。
在
MigrationController
标签页中点
migration-controller
。
在
YAML
标签页中,更新以下参数值:
spec:
restic_timeout: 1h 1
-
1
-
有效单元是
h
(小时)、
m
(分钟)和
s
(秒),例如
3h30m15s
。
点击
Save
。
10.4.2.6. MigMigration 自定义资源中的 Restic 验证错误
如果迁移使用文件系统数据复制方法的持久性卷时数据验证失败,在
MigMigration
CR 中会显示以下错误。
status:
conditions:
- category: Warn
durable: true
lastTransitionTime: 2020-04-16T20:35:16Z
message: There were verify errors found in 1 Restic volume restores. See restore `<registry-example-migration-rvwcm>`
for details 1
status: "True"
type: ResticVerifyErrors 2
错误消息指定了
Restore
CR 名称。
ResticVerifyErrors
是一个包括验证错误的一般错误警告类型。
数据验证错误不会导致迁移过程失败。
您可以检查
Restore
CR,以识别数据验证错误的来源。
登录到目标集群。
查看
Restore
CR:
$ oc describe <registry-example-migration-rvwcm> -n openshift-migration
输出会标识出带有
PodVolumeRestore
错误的持久性卷。
status:
phase: Completed
podVolumeRestoreErrors:
- kind: PodVolumeRestore
name: <registry-example-migration-rvwcm-98t49>
namespace: openshift-migration
podVolumeRestoreResticErrors:
- kind: PodVolumeRestore
name: <registry-example-migration-rvwcm-98t49>
namespace: openshift-migration
查看
PodVolumeRestore
CR:
$ oc describe <migration-example-rvwcm-98t49>
输出中标识了记录错误的
Restic
pod。
completionTimestamp: 2020-05-01T20:49:12Z
errors: 1
resticErrors: 1
resticPod: <restic-nr2v5>
查看
Restic
pod 日志以查找错误:
$ oc logs -f <restic-nr2v5>
10.4.2.7. 从启用了 root_squash 的 NFS 存储中迁移时的 Restic 权限错误
如果您要从 NFS 存储中迁移数据,并且启用了
root_squash
,
Restic
会映射到
nfsnobody
,且没有执行迁移的权限。
Restic
pod 日志中显示以下错误。
backup=openshift-migration/<backup_id> controller=pod-volume-backup error="fork/exec /usr/bin/restic: permission denied" error.file="/go/src/github.com/vmware-tanzu/velero/pkg/controller/pod_volume_backup_controller.go:280" error.function="github.com/vmware-tanzu/velero/pkg/controller.(*podVolumeBackupController).processBackup" logSource="pkg/controller/pod_volume_backup_controller.go:280" name=<backup_id> namespace=openshift-migration
您可以通过为 Restic 创建补充组并将组 ID 添加到
MigrationController
CR 清单来解决这个问题。
在 NFS 存储上为 Restic 创建补充组。
在 NFS 目录上设置
setgid
位,以便继承组所有权。
将
restic_supplemental_groups
参数添加到源和目标集群上的
MigrationController
CR 清单:
spec:
restic_supplemental_groups: <group_id> 1
-
1
-
指定补充组 ID。
等待
Restic
pod 重启,以便应用更改。
您可以使用 MTC web 控制台或 CLI 回滚迁移。
您还可以
手动回滚迁移
。
10.5.1. 使用 MTC web 控制台回滚迁移
您可以使用 Migration Toolkit for Containers(MTC)web 控制台回滚迁移。
以下资源保留在迁移的命名空间中,以便在直接卷迁移 (DVM) 失败后进行调试:
配置映射(源和目标集群)
Secret
对象(源和目标集群)
Rsync
CR(源集群)
这些资源不会影响回滚。您可以手动删除它们。
如果您稍后成功运行相同的迁移计划,则会自动删除失败迁移中的资源。
如果应用程序在迁移失败时停止,您必须回滚迁移,以防止持久性卷中的数据崩溃。
如果应用程序在迁移过程中没有停止,则不需要回滚,因为原始应用程序仍然在源集群中运行。
在 MTC web 控制台中点
Migration Plan
。
点击迁移计划
旁边的 Options 菜单,并在
Migration
下选择
Rollback
。
点
Rollback
并等待回滚完成。
在迁移计划详情中会显示
Rollback succeeded
。
验证源集群的 OpenShift Container Platform Web 控制台中是否成功回滚:
点
Home
→
Projects
。
点迁移的项目查看其状态。
在
Routes
部分,点击
Location
验证应用程序是否正常运行。
点
Workloads
→
Pods
来验证 pod 是否在迁移的命名空间中运行。
点
Storage
→
Persistent volumes
确认正确置备了被迁移的持久性卷。
您可以通过从命令行界面创建
MigMigration
自定义资源(CR)来回滚迁移。
以下资源保留在迁移的命名空间中,以便在直接卷迁移 (DVM) 失败后进行调试:
配置映射(源和目标集群)
Secret
对象(源和目标集群)
Rsync
CR(源集群)
这些资源不会影响回滚。您可以手动删除它们。
如果您稍后成功运行相同的迁移计划,则会自动删除失败迁移中的资源。
如果应用程序在迁移失败时停止,您必须回滚迁移,以防止持久性卷中的数据崩溃。
如果应用程序在迁移过程中没有停止,则不需要回滚,因为原始应用程序仍然在源集群中运行。
根据以下示例创建一个
MigMigration
CR:
$ cat << EOF | oc apply -f -
apiVersion: migration.openshift.io/v1alpha1
kind: MigMigration
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: <migmigration>
namespace: openshift-migration
spec:
rollback: true
migPlanRef:
name: <migplan> 1
namespace: openshift-migration
EOF
-
1
-
指定关联的
MigPlan
CR 的名称。
在 MTC web 控制台中,验证迁移的项目资源是否已从目标集群中移除。
验证迁移的项目资源是否存在于源集群中,并且应用程序是否正在运行。
您可以通过删除
stage
pod 并取消静止应用程序来手动回滚失败的迁移。
如果您成功运行相同的迁移计划,则会自动删除失败迁移中的资源。
在直接卷迁移失败 (DVM) 后,以下资源会保留在迁移的命名空间中:
配置映射(源和目标集群)
Secret
对象(源和目标集群)
Rsync
CR(源集群)
这些资源不会影响回滚。您可以手动删除它们。
删除所有集群中的
stage
pod:
$ oc delete $(oc get pods -l migration.openshift.io/is-stage-pod -n <namespace>) 1
-
1
-
MigPlan
CR 中指定的命名空间。
通过将副本扩展到其预迁移编号,在源集群中取消静默应用程序:
$ oc scale deployment <deployment> --replicas=<premigration_replicas>
Deployment
CR 中的
migration.openshift.io/preQuiesceReplicas
注解显示预迁移副本数:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
migration.openshift.io/preQuiesceReplicas: "1"
-
验证应用程序 pod 是否在源集群中运行:
$ oc get pod -n <namespace>
其他资源
-
使用 Web 控制台从集群中删除 Operator
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at
http://creativecommons.org/licenses/by-sa/3.0/
. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux
® is the registered trademark of Linus Torvalds in the United States and other countries.
Java
® is a registered trademark of Oracle and/or its affiliates.
XFS
® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL
® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js
® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The
OpenStack
® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
|
|
|
|
|
|
|
|