第 4 章 教程
本章的教程假定您有一个与执行 OpenShift Container Platform 集群安装相同的 OpenShift 实例。
4.1. 为 OpenShift 镜像版本的新 Red Hat Single Sign-On 更新数据库 复制链接链接已复制到粘贴板!
请注意,以下与更新相关:
- 从早期版本的 Red Hat Single Sign-On for OpenShift 的滚动更新改为版本 7.5.3,因为数据库和缓存不向后兼容。
- 用于 OpenShift 7.5.3 的红帽单点登录需要 PostgreSQL 服务器版本 13.5。如果您有一个过时的 PostgreSQL 版本,请在更新数据库前更新 PostgreSQL 版本。
- 从 Red Hat Single Sign-On for OpenShift 版本中的实例在升级前无法运行。它们不能对同一数据库同时运行。
- 预生成的脚本不可用。它们会根据数据库动态生成。
您有三种更新数据库的选择:
- 如果您有一个过时的 PostgreSQL 服务器版本,升级 PostgreSQL 服务器,然后迁移数据库。
- 允许 Red Hat Single Sign-On 7.5.3 自动迁移数据库模式
- 手动更新数据库
默认情况下,当您首次启动 Red Hat Single Sign-On 7.5.3 时,数据库会自动迁移。
4.1.1. PostgreSQL 版本升级和数据库迁移 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 7.5.3 模板中提供的 PostgreSQL 服务器可能与之前使用的版本不同。例如,请考虑这种情况:
- 您使用 PostgreSQL 服务器的版本 10,运行带有 PostgreSQL 容器集的 Red Hat Single Sign-On for OpenShift 容器镜像。
- Red Hat Single Sign-On 7.5.3 容器镜像需要 PostgreSQL pod 使用 PostgreSQL 服务器的版本 13.5。
以下流程描述了如何将 PostgreSQL 版本升级到 13.5,然后迁移数据库。
流程
首先执行数据库级别备份。
oc rsh <POSTGRE-SQL-POD> pg_dump -C <DATABASE> rhsso_db.bak
$ oc rsh <POSTGRE-SQL-POD> pg_dump -C <DATABASE> rhsso_db.bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow 缩减
sso容器集。oc scale dc/sso --replicas=0
$ oc scale dc/sso --replicas=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
dc/sso-postgresql.oc edit dc/sso-postgresql
$ oc edit dc/sso-postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
ImageStreamTag切换到:postgresql:13-el8。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
再次等待
sso-postgresqlpod 正在运行并稳定。 确保 pod
sso-postgresql具有正确的版本。oc rsh dc/sso-postgresql /bin/bash -c "psql --version" psql (PostgreSQL) 13.5
$ oc rsh dc/sso-postgresql /bin/bash -c "psql --version" psql (PostgreSQL) 13.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 取消设置变量
POSTGRESQL_UPGRADE,并再次部署sso-postgresqlpod。oc set env dc/sso-postgresql POSTGRESQL_UPGRADE-
$ oc set env dc/sso-postgresql POSTGRESQL_UPGRADE-Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确认 Pod
sso-posgresql正在运行的最后一个时间。 运行以下命令更新
openshift项目中的 OpenShift 的 Red Hat Single Sign-On 7.5.3 资源集:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
openshift项目中安装 Red Hat Single Sign-On 7.5.3 OpenShift 镜像流:oc -n openshift import-image rh-sso-7/sso75-openshift-rhel8:7.5 --from=registry.redhat.io/rh-sso-7/sso75-openshift-rhel8:7.5 --confirm
$ oc -n openshift import-image rh-sso-7/sso75-openshift-rhel8:7.5 --from=registry.redhat.io/rh-sso-7/sso75-openshift-rhel8:7.5 --confirmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新现有部署配置中的镜像更改触发器,以引用 Red Hat Single Sign-On 7.5.3 镜像。
oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]' "sso" patched$ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]' "sso" patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 开始根据镜像更改触发器中定义的最新镜像推出新的 Red Hat Single Sign-On 7.5.3 镜像。
oc rollout latest dc/sso
$ oc rollout latest dc/ssoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
ssopod 扩展至一个副本。注意您可能希望从
dc/sso中暂时增加存活和就绪度探测阈值和值(以秒为单位)。此步骤在第一次引导时执行数据库升级,这可能需要一些时间。oc scale --replicas=1 dc/sso
$ oc scale --replicas=1 dc/ssoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您有多个副本,请考虑扩展至一个副本。在 Red Hat Single Sign-On 启动后,您可以将 缩减回原始副本数。
4.1.2. 自动数据库迁移 复制链接链接已复制到粘贴板!
此流程假设您正在运行一个早期版本的 Red Hat Single Sign-On for OpenShift 镜像,由在一个单独的 pod 中运行的 PostgreSQL 数据库(以临时或持久模式部署)支持。
前提条件
- 执行 为 OpenShift 部署准备红帽单点登录身份验证 中所述的步骤。
流程
使用以下步骤自动迁移数据库架构:
识别用于部署容器的部署配置,该配置运行了 OpenShift 镜像的红帽单点登录版本。
oc get dc -o name --selector=application=sso deploymentconfig/sso deploymentconfig/sso-postgresql
$ oc get dc -o name --selector=application=sso deploymentconfig/sso deploymentconfig/sso-postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止当前命名空间中为 OpenShift 镜像运行之前版本的 Red Hat Single Sign-On 的所有 pod。它们不能对同一数据库同时运行。
oc scale --replicas=0 dc/sso deploymentconfig "sso" scaled
$ oc scale --replicas=0 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新现有部署配置中的镜像更改触发器,以引用 Red Hat Single Sign-On 7.5.3 镜像。
oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]' "sso" patched$ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]' "sso" patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 开始根据镜像更改触发器中定义的最新镜像推出新的 Red Hat Single Sign-On 7.5.3 镜像。
oc rollout latest dc/sso deploymentconfig "sso" rolled out
$ oc rollout latest dc/sso deploymentconfig "sso" rolled outCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用修改后的部署配置部署红帽 Single Sign-On 7.5.3 容器。
oc scale --replicas=1 dc/sso deploymentconfig "sso" scaled
$ oc scale --replicas=1 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)验证数据库是否已成功更新。
oc get pods --selector=application=sso NAME READY STATUS RESTARTS AGE sso-4-vg21r 1/1 Running 0 1h sso-postgresql-1-t871r 1/1 Running 0 2h
$ oc get pods --selector=application=sso NAME READY STATUS RESTARTS AGE sso-4-vg21r 1/1 Running 0 1h sso-postgresql-1-t871r 1/1 Running 0 2hCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs sso-4-vg21r | grep 'Updating' 11:23:45,160 INFO [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider] (ServerService Thread Pool -- 58) Updating database. Using changelog META-INF/jpa-changelog-master.xml
$ oc logs sso-4-vg21r | grep 'Updating' 11:23:45,160 INFO [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider] (ServerService Thread Pool -- 58) Updating database. Using changelog META-INF/jpa-changelog-master.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.3. 手动数据库迁移 复制链接链接已复制到粘贴板!
数据库迁移过程更新数据架构,并执行数据操作。在动态生成 SQL 迁移文件之前,这个过程还会停止运行之前版本的 Red Hat Single Sign-On for OpenShift 镜像的所有 pod。
此流程假设您正在运行一个早期版本的 Red Hat Single Sign-On for OpenShift 镜像,该镜像由 PostgreSQL 数据库(以临时或持久模式部署)支持,并在单独的 pod 上运行。
流程
为脚本生成准备环境。
- 使用正确的数据源配置 Red Hat Single Sign-On 7.5.3,
在
standalone-openshift.xml文件中设置以下配置选项:-
initializeEmpty=false, -
migrationStrategy=manual, 和 -
migrationExportto the pod 文件系统中的位置,应存储输出 SQL 迁移文件(例如,migrationExport="${jboss.home.dir}/keycloak-database-update.sql)。
-
流程
执行以下步骤为数据库生成 SQL 迁移文件:
准备 OpenShift 数据库迁移作业模板,以生成 SQL 文件。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cp job-to-migrate-db-to-sso75.yaml.orig \ job-to-migrate-db-to-sso75.yaml$ cp job-to-migrate-db-to-sso75.yaml.orig \ job-to-migrate-db-to-sso75.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从用于运行 OpenShift 镜像的 Red Hat Single Sign-On 版本的部署配置中,复制数据源定义和数据库访问凭据,使其适合数据库迁移作业模板的位置。
使用以下脚本复制
DB_SERVICE_PREFIX_MAPPING和TX_DATABASE_PREFIX_MAPPING变量值,以及特定于特定数据源的环境变量的值( <PREFIX>_JNDI、<PREFIX>_USERNAME、<PREFIX>_PASSWORD和<PREFIX>_) DATABASE),从名为sso的部署配置到名为job-to-migrate-db-to-sso75.yaml的数据库作业模板。注意虽然
DB_SERVICE_PREFIX_MAPPING环境变量允许 以逗号分隔的 < name>-<database_type>=<PREFIX > triplets 列表 作为其值,本例脚本只接受一个数据源行程序定义用于演示目的。您可以修改 脚本来处理多个数据源定义。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行脚本。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 预先配置的来源构建 Red Hat Single Sign- On 7.5.3 数据库迁移镜像,并等待构建完成。
oc get is -n openshift | grep sso75 | cut -d ' ' -f1 sso75-openshift-rhel8
$ oc get is -n openshift | grep sso75 | cut -d ' ' -f1 sso75-openshift-rhel8Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs -f bc/sso75-db-migration-image --follow Cloning "https://github.com/iankko/openshift-examples.git#KEYCLOAK-8500" ... ... Push successful
$ oc logs -f bc/sso75-db-migration-image --follow Cloning "https://github.com/iankko/openshift-examples.git#KEYCLOAK-8500" ... ... Push successfulCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过引用内置的
sso75-db-migration-image镜像,更新数据库迁移作业(job-to-migrate-db-to-sso75.yaml)的模板。获取镜像的 docker pull 引用。
PULL_REF=$(oc get istag -n $(oc project -q) --no-headers | grep sso75-db-migration-image | tr -s ' ' | cut -d ' ' -f 2)
$ PULL_REF=$(oc get istag -n $(oc project -q) --no-headers | grep sso75-db-migration-image | tr -s ' ' | cut -d ' ' -f 2)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将作业模板的 <<SSO_IMAGE_VALUE>> 字段替换为 pull 规格。
sed -i "s#<<SSO_IMAGE_VALUE>>#$PULL_REF#g" job-to-migrate-db-to-sso75.yaml
$ sed -i "s#<<SSO_IMAGE_VALUE>>#$PULL_REF#g" job-to-migrate-db-to-sso75.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证字段是否已更新。
从作业模板实例化数据库迁移作业。
oc create -f job-to-migrate-db-to-sso75.yaml job "job-to-migrate-db-to-sso75" created
$ oc create -f job-to-migrate-db-to-sso75.yaml job "job-to-migrate-db-to-sso75" createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要数据库迁移过程处理数据 schema 更新并执行相关的数据,因此在动态生成 SQL 迁移文件前,停止所有运行 Red Hat Single Sign-On for OpenShift 镜像的 pod。
识别用于部署容器的部署配置,该配置运行了 OpenShift 镜像的红帽单点登录版本。
oc get dc -o name --selector=application=sso deploymentconfig/sso deploymentconfig/sso-postgresql
$ oc get dc -o name --selector=application=sso deploymentconfig/sso deploymentconfig/sso-postgresqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 停止当前命名空间中为 OpenShift 镜像运行之前版本的 Red Hat Single Sign-On 的所有 pod。
oc scale --replicas=0 dc/sso deploymentconfig "sso" scaled
$ oc scale --replicas=0 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行数据库迁移作业,并等待 pod 正确运行。
oc get jobs NAME DESIRED SUCCESSFUL AGE job-to-migrate-db-to-sso75 1 0 3m
$ oc get jobs NAME DESIRED SUCCESSFUL AGE job-to-migrate-db-to-sso75 1 0 3mCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale --replicas=1 job/job-to-migrate-db-to-sso75 job "job-to-migrate-db-to-sso75" scaled
$ oc scale --replicas=1 job/job-to-migrate-db-to-sso75 job "job-to-migrate-db-to-sso75" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods NAME READY STATUS RESTARTS AGE sso-postgresql-1-n5p16 1/1 Running 1 19h job-to-migrate-db-to-sso75-b87bb 1/1 Running 0 1m sso75-db-migration-image-1-build 0/1 Completed 0 27m
$ oc get pods NAME READY STATUS RESTARTS AGE sso-postgresql-1-n5p16 1/1 Running 1 19h job-to-migrate-db-to-sso75-b87bb 1/1 Running 0 1m sso75-db-migration-image-1-build 0/1 Completed 0 27mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,数据库迁移作业在生成迁移文件后在
600 秒后自动终止。您可以调整这个时间段。从 pod 获取动态生成的 SQL 数据库迁移文件。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
keycloak-database-update.sql文件,以便在手动数据库更新过程中对 Red Hat Single Sign-On 7.5.3 版本进行的更改。 手动应用数据库更新。
如果运行一些之前版本的 Red Hat Single Sign-On for OpenShift 镜像,则由以临时或持久模式部署的 PostgreSQL 数据库支持,请在单独的 pod 上运行:
将生成的 SQL 迁移文件复制到 PostgreSQL pod。
oc rsync --no-perms=true ./db-update/ sso-postgresql-1-n5p16:/tmp sending incremental file list sent 77 bytes received 11 bytes 176.00 bytes/sec total size is 26,333 speedup is 299.24
$ oc rsync --no-perms=true ./db-update/ sso-postgresql-1-n5p16:/tmp sending incremental file list sent 77 bytes received 11 bytes 176.00 bytes/sec total size is 26,333 speedup is 299.24Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动连接到 PostgreSQL pod 的 shell 会话。
oc rsh sso-postgresql-1-n5p16 sh-4.2$
$ oc rsh sso-postgresql-1-n5p16 sh-4.2$Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
psql工具手动应用数据库更新。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要将
<PREFIX>_USERNAME和<PREFIX>_DATABASE替换为 上一节中 检索到的实际数据库凭证。另外,在提示时使用 <PREFIX>_PASSWORD作为数据库的密码。- 关闭与 PostgreSQL pod 的 shell 会话。继续 更新镜像更改触发器步骤。
更新现有部署配置中的镜像更改触发器,以引用 Red Hat Single Sign-On 7.5.3 镜像。
oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]' "sso" patched$ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]' "sso" patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 开始根据镜像更改触发器中定义的最新镜像推出新的 Red Hat Single Sign-On 7.5.3 镜像。
oc rollout latest dc/sso deploymentconfig "sso" rolled out
$ oc rollout latest dc/sso deploymentconfig "sso" rolled outCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用修改后的部署配置部署红帽 Single Sign-On 7.5.3 容器。
oc scale --replicas=1 dc/sso deploymentconfig "sso" scaled
$ oc scale --replicas=1 dc/sso deploymentconfig "sso" scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow