本页面介绍如何将 Apigee Hybrid 组织从一个 Kubernetes 集群迁移到另一个 Kubernetes 集群。在以下情况下,您可能需要将组织迁移到另一个集群:
- 托管现有集群的数据中心没有更多的容量,或者即将停用。
- 集群正在运行旧基础架构或旧版 Kubernetes,并且您想要迁移到具有较新基础架构的集群。
- 您希望将组织从多组织集群迁移到单独的集群。
请注意,将组织迁移到另一个 Hybrid 集群时,存在风险和限制。在执行迁移之前,请先阅读限制部分中的详细信息。
限制
将 Hybrid 组织迁移到另一个 Kubernetes 集群时,存在以下限制:
- 将组织数据迁移到新的 Kubernetes 集群时,存在数据丢失的风险。在迁移组织之前,您应按照 Hybrid 备份说明在该 Kubernetes 集群中备份所有组织的数据。
- 在一个组织的所有键空间中,组织迁移支持的数据大小上限为 5GB(缓存和配额除外)。
- 缓存数据不会迁移。Hybrid 会重新构建缓存数据。
- 配额数据不会迁移。Hybrid 会重置配额数据。
- 您只能将组织迁移到不包含现有 Hybrid 部署的 Kubernetes 集群。不支持迁移到已有 Hybrid 部署的集群。
- 要迁移的组织只能迁移到具有单区域部署的新集群。单区域部署启动并运行后,您可以按照多区域部署中所述的区域扩展过程扩展到其他区域。
- Cassandra 集群应该在所有区域都运行良好。
迁移组织
按照以下说明将 Hybrid 组织从一个 Kubernetes 集群迁移到另一个 Kubernetes 集群:
- 在包含要迁移的 Hybrid 组织的 Kubernetes 集群上启用备份(如果尚未启用)。如需了解 Hybrid 备份,请参阅 Cassandra 备份概览。
- 使用以下命令启动 Hybrid 备份作业:
kubectl create job -n apigee --from=cronjob/apigee-cassandra-backup <backup job name>
<backup job name>
可以是任何有效的容器名称。 - 备份作业完成后,请按照监控备份的以下部分中的说明验证备份是否已成功完成:
- “检查备份作业的状态”
- “检查备份日志”
- 验证备份是否成功后,记下备份日志末尾的 ID 编号。例如,成功的备份日志应包含如下所示的行:
INFO: completed upload for 20230207004250
记下行末尾的多位数数字。您日后需要用到此编号。 - 将 Kubernetes 上下文切换到目标 Kubernetes 集群:
kubectl config use-context <destination cluster name> # <destination cluster name>
其中
<destination cluster name>
是目标 Kubernetes 集群的名称。 - 按照在单个区域中恢复中的说明,将备份数据恢复到目标 Kubernetes 集群中。
- 使用要迁移到目标 Hybrid 部署的组织的 override.yaml 文件。
- 务必将
restore:snapshotTimestamp
值设置为第 4 步中的备份日志所显示的多位数数字。请参阅在单个区域中恢复。
- 恢复完成后,从目标 Kubernetes 集群中删除所有组织数据(要迁移的组织的数据除外)。Hybrid 备份文件包含所有组织的数据,包括您可能不希望迁移的组织。目标 Hybrid 部署恢复后,您需要按照以下步骤移除复制到该部署中的所有额外组织数据:
- 验证当前上下文是目标 Kubernetes 集群的正确上下文:
kubectl config current-context
- 对
apigee-cassandra-default-0
Pod 执行 exec:kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
- 执行以下命令:
find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2 -printf "%f\n"
如需了解如何查找
<migrated org name>
,请参阅获取已迁移组织的名称。复制输出中显示的所有名称的列表。在第 7. f 步中您需要用到此列表。
- 退出
apigee-cassandra-default-0
pod。 - 按照创建用于调试的客户端容器中的说明,创建 Cassandra 调试客户端 pod。在看到
cqlsh
提示后,继续执行下一步。 - 在
cqlsh
提示中,执行以下命令:-
desc keyspaces;
确保此命令不返回任何错误。
- 对于在第 7.c 步中创建的列表中的每个名称,请运行以下命令:
drop keyspace <name>
-
- 退出 Cassandra 调试客户端 pod。
- 执行
cqlsh
命令后,请在目标 Kubernetes 集群中的所有 Cassandra pod 上运行以下命令:kubectl exec -it -n apigee
-- /bin/bash find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2
如需了解如何查找
<migrated org name>
,请参阅获取已迁移组织的名称。find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*
*' -type d -maxdepth 2 -exec rm -rf {} +
- 退出 Cassandra Pod。
- 验证当前上下文是目标 Kubernetes 集群的正确上下文:
- 将 Kubernetes 上下文切换到来源 Kubernetes 集群:
kubectl config use-context <source cluster name>
其中,
<source cluster name>
是来源 kubernetes 集群的名称。 - 从来源 Kubernetes 集群中删除已迁移的组织。请务必在删除命令中使用该组织的
overrides.yaml
文件:- 验证当前上下文是来源 Kubernetes 集群的正确上下文:
kubectl config current-context
如果需要,请将 Kubernetes 上下文设置为需要停用的集群和组织。
列出当前上下文以查看每个集群的上下文名称:
kubectl config get-contexts
将上下文设置为要停用的集群和区域:
kubectl config use-context CONTEXT_NAME
其中,CONTEXT_NAME 是集群和区域的上下文名称。
例如:
kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE gke_example-org-1_us-central1_example-cluster-1 gke_example-org-1_us-central1_example-cluster-1 gke_example-org-1_us-central1_example-cluster-1 apigee * gke_example-org-1_us-central1_example-cluster-2 gke_example-org-1_us-central1_example-cluster-2 gke_example-org-1_us-central1_example-cluster-2 apigee gke_example-org-1_us-west1_example-cluster-2 gke_example-org-1_us-west1_example-cluster-2 gke_example-org-1_us-west1_example-cluster-2 apigeekubectl config use-context gke_example-org-1_us-west1_example-cluster-2
- 删除虚拟主机。
Helm
对每个环境组重复此步骤:
helm -n apigee delete ENV_GROUP_NAME
apigeectl
$APIGEECTL_HOME/apigeectl delete --settings virtualhost -f OVERRIDES_FILE.yaml
- 删除环境。
Helm
对每个环境重复运行以下命令:
helm -n apigee delete ENV_NAME
apigeectl
$APIGEECTL_HOME/apigeectl delete --all-envs -f OVERRIDES_FILE.yaml
- 删除 Apigee 组织。
Helm
helm -n apigee delete ORG_NAME
apigeectl
$APIGEECTL_HOME/apigeectl delete -f OVERRIDES_FILE.yaml --org
- 对 apigee-cassandra-default-0 Pod 执行 exec:
kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
- 执行以下命令:
find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -printf "%f\n"
如需了解如何查找
<migrated org name>
,请参阅获取已迁移组织的名称。复制输出中显示的所有名称的列表。 在第 9. j 步中您需要用到此列表。
- 退出
apigee-cassandra-default-0
pod。 - 按照创建用于调试的客户端容器中的说明,创建 Cassandra 调试客户端 pod。在看到
cqlsh
提示后,继续执行下一步。 - 在
cqlsh
提示符处,执行以下命令:desc keyspaces;
确保此命令不返回任何错误。
- 对于在第 10.f 步中创建的列表中的每个名称,运行以下命令:
drop keyspace <name>;
- 退出 Cassandra 调试客户端 pod。 执行
-
kubectl exec -it -n apigee <cassandra pod name> -- /bin/bash
-
find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2
如需了解如何查找
<migrated org name>
,请参阅获取已迁移组织的名称。 -
find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -exec rm -rf {} +
- 退出 Cassandra Pod。
cqlsh
命令后,请在来源 Kubernetes 集群中的所有 Cassandra pod 上运行以下命令: - 验证当前上下文是来源 Kubernetes 集群的正确上下文:
获取已迁移组织的名称
上一部分介绍的过程中的一些步骤需要已迁移组织的名称。如需获取已迁移组织的名称,请执行以下操作:
- 从组织的 overrides.yaml 文件中获取组织名称。请务必检查要迁移的组织的 override.yaml 文件。
- 如果组织名称包含任何短划线“-”,请将所有短划线“-”替换为下划线“_”。