2.3. 升级 system-database secret 字段


作为 3scale 2.5 的更改的一部分,system-mysql DeploymentConfig 中的一些数据库环境变量是从 secret 中分配的,而不是直接设置值。包括:

  • MYSQL_USER 环境变量从 system-database secret 字段 DB_USER 获取其值。
  • MYSQL_PASSWORD 环境变量从 system-database secret 字段 DB_PASSWORD 获取其值。

要将现有 3scale 2.4 安装升级到 2.5,请按照以下步骤操作:

  1. 验证以下命令是否返回现有的 pod 和 DeploymentConfig,以及两个输出都不为空:

    $ oc get pod | grep -i system-mysql | awk '{print $1}'
    $ oc get dc system-mysql
    Copy to Clipboard Toggle word wrap
  2. 保存当前的 DeploymentConfig 名称,以及 DeploymentConfig 的 MySQL 用户和 MySQL 环境变量的值:

    MYSQL_DC="system-mysql"
    RESULT_MYSQL_USER=$(oc get dc ${MYSQL_DC} -o json | jq -r '.spec.template.spec.containers[0].env[] | select(.name == "MYSQL_USER").value')
    RESULT_MYSQL_PASSWORD=$(oc get dc ${MYSQL_DC} -o json | jq -r '.spec.template.spec.containers[0].env[] | select(.name == "MYSQL_PASSWORD").value')
    Copy to Clipboard Toggle word wrap
  3. 验证 RESULT_MYSQL_USER 和 RESULT_MYSQL_PASSWORD 是否具有现有的值,且不是空的:

    $ echo $RESULT_MYSQL_USER
    $ echo $RESULT_MYSQL_PASSWORD
    Copy to Clipboard Toggle word wrap
  4. 保存这些值以备将来参考。
  5. 通过保存以下命令的输出,创建整个 system-mysql 环境的备份:

    $ oc set env "dc/${MYSQL_DC}" --list
    Copy to Clipboard Toggle word wrap
  6. 另外,通过保存以下命令的输出来创建备份 system-database secret 和 system-database DeploymentConfig 的值:

    $ oc get secret system-database -o yaml
    $ oc get dc system-mysql -o yaml
    Copy to Clipboard Toggle word wrap
  7. 将 MySQL 用户和密码的当前值添加到 system-database secret 中:

    $ oc patch secret/system-database -p "{\"stringData\": {\"DB_USER\": \"${RESULT_MYSQL_USER}\"}}"
    $ oc patch secret/system-database -p "{\"stringData\": {\"DB_PASSWORD\": \"${RESULT_MYSQL_PASSWORD}\"}}"
    Copy to Clipboard Toggle word wrap
  8. 验证 secret 是否已成功编辑。以下命令应分别返回与 RESULT_MYSQL_USER 和 RESULT_MYSQL_PASSWORD 相同的内容:

    $ oc get secret system-database -o json | jq -r '.data["DB_USER"]' | base64 -d
    $ oc get secret system-database -o json | jq -r '.data["DB_PASSWORD"]' | base64 -d
    Copy to Clipboard Toggle word wrap
  9. 手动编辑 system-mysql DeploymentConfig,将新添加的字段中的 MYSQL_USER 和 MYSQL_PASSWORD 的值设置为 system-database secret。

    警告

    执行此步骤将触发 system-mysql DeploymentConfig 的重新部署,在 Pod 重新创建时导致临时服务丢失。

    $ oc edit dc $MYSQL_DC
    Copy to Clipboard Toggle word wrap
  10. 在编辑时,找到 env 部分。您应该找到:

    - name: MYSQL_USER
      value: <current_mysql_user_value>
    - name: MYSQL_PASSWORD
      value: <current_mysql_password_value>
    Copy to Clipboard Toggle word wrap
  11. 将该内容替换为:

    - name: MYSQL_USER
      valueFrom:
        secretKeyRef:
          key: DB_USER
          name: system-database
    - name: MYSQL_PASSWORD
      valueFrom:
        secretKeyRef:
          key: DB_PASSWORD
          name: system-database
    Copy to Clipboard Toggle word wrap
  12. 保存更改并退出。
  13. 之后,DeploymentConfig 将重新部署 pod。验证 system-mysql 容器集再次运行并处于正确的状态,并且平台可再次正常工作。例如,您可以检查 DeploymentConfig 是否已设置为 1:

    $ oc get dc ${MYSQL_DC}
    Copy to Clipboard Toggle word wrap

    pod 应该最近运行:

    $ oc get pods | grep -i system-mysql
    Copy to Clipboard Toggle word wrap

    您还可以验证 system-mysql DeploymentConfig 的环境变量现在是否是从 secret 收集:

    $ oc set env "dc/${MYSQL_DC}" --list
    Copy to Clipboard Toggle word wrap

    您应该作为结果的一部分看到:

    # MYSQL_USER from secret system-database, key DB_USER
    # MYSQL_PASSWORD from secret system-database, key DB_PASSWORD
    Copy to Clipboard Toggle word wrap

    MYSQL_USER 和 MYSQL_PASSWORD 不包含特定值。

其他备注:

  • system-mysql 重启时,可能会出现 system-app, system-sidekiqsystem-sphinx pod 的故障转移,但一部可能并不需要重新部署它们。
  • 如果 pod 无法恢复,则手动重新部署对应的 DeploymentConfig。
  • 为防止故障转移,可以将维护窗口添加到迁移流程中,将这些 DeploymentConfig 缩减为零,然后再重新启动 system-mysql 重新启动并在恢复后再重新启动,并传递就绪度探测。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat