迁移 Red Hat 3scale API Management
迁移或升级 3scale API 管理及其组件
摘要
前言
本指南提供了通过 3scale 操作器将 Red Hat 3scale API Management 升级到最新版本的信息。您将找到将 3scale 安装从 2.14 升级到 2.15 所需的详细信息,以及在基于 Operator 的部署中升级 APIcast 的步骤。
要升级 3scale 内部部署,请参阅以下指南:
要在基于 Operator 的部署中升级 APIcast,请参阅以下指南:
对红帽文档提供反馈
我们感谢您对我们文档的反馈。
要改进,创建一个 JIRA 问题并描述您推荐的更改。提供尽可能多的详细信息,以便我们快速解决您的请求。
前提条件
- 您有红帽客户门户网站帐户。此帐户可让您登录到 Red Hat Jira Software 实例。如果您没有帐户,系统会提示您创建一个帐户。
流程
- 单击以下链接: 创建问题。
- 在 Summary 文本框中输入问题的简短描述。
在 Description 文本框中提供以下信息:
- 找到此问题的页面的 URL。
-
有关此问题的详细描述。
您可以将信息保留在任何其他字段中的默认值。
- 点 Create 将 JIRA 问题提交到文档团队。
感谢您花时间来提供反馈。
第 1 章 3scale API 管理基于 operator 的升级指南:从 2.14 升级到 2.15
在基于 operator 的安装中,将 Red Hat 3scale API Management 从 2.14 升级到 2.15,以在 OpenShift 4.x 上管理 3scale。
要自动获得 3scale 的微版本,请确保自动更新已经启动。如果您使用 Oracle 外部数据库,请不要设置自动更新。要查看这一点,请参阅配置微版本的自动应用程序。
为了了解所需的条件和程序,请在应用列出的步骤前阅读整个升级指南。升级过程会破坏服务的调配,直到过程完成为止。因为这个过程需要涉及到系统中断,请确保计划有一个维护窗口进行。
1.1. 执行升级的先决条件
要使用 3scale 操作器解决证书验证失败,请添加注解 来跳过对受影响的自定义资源(CR)的证书验证。此注解可以在创建过程中应用到 CR,或添加到现有 CR 中。应用后,会协调错误。
本节介绍了在基于 Operator 的安装中,将 3scale 从 2.14 升级到 2.15 所需的配置。
- 具有管理员访问权限的 OpenShift Container Platform (OCP) 4.12、4.13、4.14、4.15、4.16 或 4.17 集群。确保您的 OCP 环境至少升级到 4.12 版本,这是进行 3scale 更新的最低要求。
- 3scale 2.14 以前通过 3scale operator 部署。
确保正在使用
threescale-2.14
频道的最新 CSV。检查它:- 如果订阅的批准设置 是自动的,您应该已处于该频道的最新 CSV 版本。
- 如果订阅的批准设置是 manual,请确保批准所有待处理的 InstallPlans,并具有最新的 CSV 版本。
- 请记住,如果有一个待处理的安装计划,可能还有更多待处理的安装计划,只有在安装了现有待定计划后才会显示这些计划。
1.1.1. 3scale API Management 2.15 pre-flight 检查
- 如果没有升级数据库,3scale 实例不会升级到 2.15。
- 您可以使用或不使用 3scale 2.15 operator 来升级数据库。如果 Operator 正在运行,它会每 10 分钟检查数据库版本,并自动触发升级过程。如果 Operator 在升级过程中没有运行,请扩展它。您必须这样做才能验证要求并继续安装。
在通过操作器安装 3scale 2.15 之前,请确保您的数据库组件满足所需的最低版本。这个 pre-flight 检查对于避免在升级过程中破坏 3scale 实例至关重要。
1.1.1.1. 组件和最低版本要求
- Oracle 数据库不会被检查。
- 不选中带有 Oracle 的系统数据库。
- 没有检查带有外部数据库的 zync。
确保以下组件位于或超过指定版本:
system-app 组件:
- MySQL: 8.0.0
- PostgreSQL: 10.0.0
后端组件:
- Redis: 6.2 (需要两个实例)
版本验证
验证 MySQL 版本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysql --version
$ mysql --version
验证 PostgreSQL 版本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow psql --version
$ psql --version
验证 Redis 版本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow redis-server --version
$ redis-server --version
1.1.1.2. 升级数据库不满足要求
如果您的数据库版本没有满足最低要求,请按照以下步骤执行:
- 无论数据库版本是什么,都安装了 2.15 运算符。
升级数据库:
- 升级 MySQL、PostgreSQL 或 Redis,以满足最低所需的版本。
- 注意: 遵循每个数据库的升级程序的官方文档。
恢复 2.15 升级:
- 当数据库升级后,3scale 2.15 operator 会检测新版本。
- 3scale 2.15 的升级过程将自动进行。
通过遵循这些预动态检查并确保数据库组件处于最新状态,您可以过渡到 3scale 2.15。
1.2. 在基于 Operator 的安装中,从 2.14 升级到 2.15
在基于 operator 的部署中将 3scale 从 2.14 升级到 2.15:
- 使用具有管理员特权的帐户登录 OCP 控制台。
- 选择部署了 3scale-operator 的项目。
- 点 Operators > Installed Operators。
- 选择 Red Hat Integration - 3scale > Subscription > Channel。
选择 threescale-2.15 并保存更改,以编辑订阅的频道。
这将开始升级过程。
查询项目中 pod 的状态,直到您看到所有新版本都在运行并就绪且没有错误:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n <3scale_namespace>
$ oc get pods -n <3scale_namespace>
注意- pod 在升级过程中可能会出现临时错误。
- 升级 pod 所需的时间可能从 5 到 10 分钟。
- 新 pod 版本运行后,通过登录 3scale 管理门户并检查它是否按预期工作,确认升级是否成功。
运行以下命令,检查 APIManager 对象的状态并获取 YAML 内容。<myapimanager> 代表 APIManager 的名称:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get apimanager <myapimanager> -n <3scale_namespace> -o yaml
$ oc get apimanager <myapimanager> -n <3scale_namespace> -o yaml
带有值的新注解应如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apps.3scale.net/apimanager-threescale-version: "2.15" apps.3scale.net/threescale-operator-version: "0.12.x"
apps.3scale.net/apimanager-threescale-version: "2.15" apps.3scale.net/threescale-operator-version: "0.12.x"
执行所有步骤后,基于 operator 的部署中的 3scale 从 2.14 升级到 2.15 已完成。
1.3. 在使用外部 Oracle 数据库的基于 Operator 的安装中,从 2.14 升级到 2.15
按照以下步骤,使用外部 Oracle 数据库更新基于 Operator 的 3scale 安装。
流程
-
按照以下步骤 安装 Red Hat 3scale API 管理指南,以创建新的
system-oracle-3scale-2.14.0-1
镜像。 - 按照 link:h:Link3scaleMigrating3scale 中的步骤: 在基于 operator 的安装中从 2.14 升级到 2.15 来升级 3scale operator。
- 升级完成后,使用此流程的第一步中创建的新镜像更新 APIManager 自定义资源,如 使用 operator 安装 3scale API 管理 中所述。
第 2 章 基于 APIcast operator 的升级指南:从 2.14 升级到 2.15
在基于 Operator 的安装中,将 APIcast 从 2.14 升级到 2.15,可帮助您使用 APIcast API 网关将内部和外部应用程序编程接口(API)服务与 3scale 集成。
为了了解所需的条件和程序,请在应用列出的步骤前阅读整个升级指南。升级过程会破坏服务的调配,直到过程完成为止。因为这个过程需要涉及到系统中断,请确保计划有一个维护窗口进行。
2.1. 执行升级的先决条件
要在基于 operator 的安装过程中执行 APIcast 从 2.14 升级到 2.15,需要满足以下先决条件:
- 具有管理员访问权限的 OpenShift Container Platform (OCP) 4.12、4.13、4.14、4.15、4.16 或 4.17 集群。确保您的 OCP 环境至少升级到 4.12 版本,这是继续 APIcast 更新的最低要求。
- APIcast 2.14 之前通过 APIcast operator 部署。
确保正在使用
threescale-2.14
频道的最新 CSV。检查它:- 如果订阅的批准设置 是自动的,您应该已处于该频道的最新 CSV 版本。
- 如果订阅的批准设置是 manual,请确保批准所有待处理的 InstallPlans,并具有最新的 CSV 版本。
- 请记住,如果有一个待处理的安装计划,可能还有更多待处理的安装计划,只有在安装了现有待定计划后才会显示这些计划。
2.2. 在基于 Operator 的安装中,将 APIcast 从 2.14 升级到 2.15
在基于 Operator 的安装中,将 APIcast 从 2.14 升级到 2.15,以便 APIcast 可以在 3scale 安装中作为 API 网关运行。
流程
- 使用具有管理员特权的帐户登录 OCP 控制台。
- 选择部署了 APIcast Operator 的项目。
- 点 Operators > Installed Operators。
- 在 Subscription > Channel 中,选择 Red Hat Integration - 3scale APIcast gateway。
选择 threescale-2.15 频道并保存更改,以编辑订阅的频道。
这将开始升级过程。
查询项目中 pod 的状态,直到您看到所有新版本都在运行并就绪且没有错误:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n <apicast_namespace>
$ oc get pods -n <apicast_namespace>
注意- pod 在升级过程中可能会出现临时错误。
- 升级 pod 所需的时间可能从 5 到 10 分钟。
运行以下命令,检查 APIcast 对象的状态,并获取 YAML 内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get apicast <myapicast> -n <apicast_namespace> -o yaml
$ oc get apicast <myapicast> -n <apicast_namespace> -o yaml
带有值的新注解应如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apicast.apps.3scale.net/operator-version: "0.12.x"
apicast.apps.3scale.net/operator-version: "0.12.x"
执行所有步骤后,基于 operator 的部署中的 APIcast 从 2.14 升级到 2.15 已完成。
第 3 章 从嵌入式 PostgreSQL 10 数据库迁移到外部 PostgreSQL 10 数据库
-
在将
system.appSpec.replicas
扩展到1
之前,数据库应升级到受支持的版本,当前为 PostgreSQL 13。请参阅 Red Hat 3scale API Management 支持的配置 - 本文档关于从嵌入式 PostgreSQL 10 数据库迁移到外部 PostgreSQL 10 数据库。要从外部 PostgreSQL 10 数据库升级到外部 PostgreSQL 13 数据库,您必须遵循官方 PostgreSQL 文档。
- 免责声明:此处包含的外部网络链接仅为方便用户而提供。红帽没有审阅链接的内容,并不对其内容负责。包含任何指向外部网站的链接并不表示红帽认可该网站或其实体、产品或服务。您同意红帽对因您使用(或依赖)外部网站或内容而导致的任何损失或费用不承担任何责任。
在同一 DB 版本中应该发生从嵌入式 PostgreSQL 数据库迁移到和外部 PostgreSQL 数据库的过程。在此迁移指南中,它应该是 PostgreSQL 10。您应该在生产环境中使用外部数据库。
如果您使用 PostgreSQL 作为 system-database
,请使用 3scale 安装的外部数据库 支持版本。
- 这些步骤是常规准则。具体步骤可能会因您的操作系统、PostgreSQL 版本和数据库的特定要求而异。
- 在升级前,仔细阅读 PostgreSQL 文档 和发行注记。
- 在将此步骤应用到生产部署之前,在非生产环境中测试此步骤。
- 此过程会破坏服务的调配,直到过程完成为止。因为这个过程需要涉及到系统中断,请确保计划有一个维护窗口进行。
流程
使用 APIManager 客户资源(CR)缩减
system-app
DeploymentConfig (DC):Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: <apimanager_sample> spec: system: appSpec: replicas: 0 wildcardDomain: <example.com>
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: <apimanager_sample> spec: system: appSpec: replicas: 0 wildcardDomain: <example.com>
验证 pod 是否已缩减:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get deploymentconfig system-app -o jsonpath='{.status.availableReplicas}{"\n"}'
$ oc get deploymentconfig system-app -o jsonpath='{.status.availableReplicas}{"\n"}' 0
-
等待所有 3scale pod 的状态为
Terminated
,然后继续 PostgreSQL 迁移。
-
等待所有 3scale pod 的状态为
备份现有的 PostgreSQL 数据库,包括所有数据、配置和用户帐户:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DB_USER=$(oc get secret system-database -o jsonpath="{.data.DB_USER}" | base64 --decode) DATABASE_NAME=$(oc get secret system-database -o jsonpath="{.data.URL}" | base64 --decode | cut -d '/' -f4)
$ DB_USER=$(oc get secret system-database -o jsonpath="{.data.DB_USER}" | base64 --decode) $ DATABASE_NAME=$(oc get secret system-database -o jsonpath="{.data.URL}" | base64 --decode | cut -d '/' -f4)
重要不要管道到
stdout
。二进制文件已损坏。带有自定义格式的转储:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc rsh $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name') bash -c "pg_dump -U $DB_USER -F c $DATABASE_NAME -f /tmp/<backupfilename>.backup"
$ oc rsh $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name') bash -c "pg_dump -U $DB_USER -F c $DATABASE_NAME -f /tmp/<backupfilename>.backup"
下载备份:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc cp $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name'):/tmp/<backupfilename>.backup <backupfilename>.backup
$ oc cp $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name'):/tmp/<backupfilename>.backup <backupfilename>.backup
- 在目标外部系统中安装部署在 3scale 上的同一 PostgreSQL 10 版本。按照安装说明,从 PostgreSQL 网站下载安装软件包。
- 复制并恢复您现有的 PostgreSQL 数据库的备份,包括所有数据、配置和用户帐户到目标外部系统。
在 PostgreSQL 中创建新数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow createdb -U <username> <databasename>
$ createdb -U <username> <databasename>
将备份文件中的数据导入到新的 PostgreSQL 数据库。
使用自定义格式恢复:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_restore [--host <databasehostname>] -U <username> -d <databasename> --verbose -F c <backupfilename>.backup
$ pg_restore [--host <databasehostname>] -U <username> -d <databasename> --verbose -F c <backupfilename>.backup
通过连接到数据库并运行查询来验证数据是否已成功导入到新的 PostgreSQL 数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow postgresql://<username>:<password>@<databasehostname>/<databasename>
postgresql://<username>:<password>@<databasehostname>/<databasename>
更新
system-database
secret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f - <<EOF --- apiVersion: v1 kind: Secret metadata: name: system-database stringData: DB_PASSWORD: <password> DB_USER: <username> URL: "postgresql://<username>:<password>@<databasehostname>:<databaseport>/<databasename>" type: Opaque EOF
$ oc apply -f - <<EOF --- apiVersion: v1 kind: Secret metadata: name: system-database stringData: DB_PASSWORD: <password> DB_USER: <username> URL: "postgresql://<username>:<password>@<databasehostname>:<databaseport>/<databasename>" type: Opaque EOF
更新 APImanager CR,以启用外部数据库并扩展系统:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch apimanager <apimanager_sample> --type=merge --patch '{"spec": {"system": {"database": null, "appSpec": {"replicas": 1}}, "externalComponents": {"system": {"database": true}}}}'
$ oc patch apimanager <apimanager_sample> --type=merge --patch '{"spec": {"system": {"database": null, "appSpec": {"replicas": 1}}, "externalComponents": {"system": {"database": true}}}}'
删除本地 postgresql 部署:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete service system-postgresql oc delete deploymentconfig system-postgresql oc delete pvc postgresql-data
$ oc delete service system-postgresql $ oc delete deploymentconfig system-postgresql $ oc delete pvc postgresql-data
验证 pod 是否已扩展:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc wait --for=condition=available apimanager/<apimanager_sample> --timeout=-1s
$ oc wait --for=condition=available apimanager/<apimanager_sample> --timeout=-1s