2.3. 升级 system-database secret 字段
作为 3scale 2.5 的更改的一部分,system-mysql DeploymentConfig 中的一些数据库环境变量是从 secret 中分配的,而不是直接设置值。包括:
-
MYSQL_USER 环境变量从
system-databasesecret 字段 DB_USER 获取其值。 -
MYSQL_PASSWORD 环境变量从
system-databasesecret 字段 DB_PASSWORD 获取其值。
要将现有 3scale 2.4 安装升级到 2.5,请按照以下步骤操作:
验证以下命令是否返回现有的 pod 和 DeploymentConfig,以及两个输出都不为空:
oc get pod | grep -i system-mysql | awk '{print $1}' oc get dc system-mysql$ oc get pod | grep -i system-mysql | awk '{print $1}' $ oc get dc system-mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 保存当前的 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')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 Copied! Toggle word wrap Toggle overflow 验证 RESULT_MYSQL_USER 和 RESULT_MYSQL_PASSWORD 是否具有现有的值,且不是空的:
echo $RESULT_MYSQL_USER echo $RESULT_MYSQL_PASSWORD
$ echo $RESULT_MYSQL_USER $ echo $RESULT_MYSQL_PASSWORDCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存这些值以备将来参考。
通过保存以下命令的输出,创建整个
system-mysql环境的备份:oc set env "dc/${MYSQL_DC}" --list$ oc set env "dc/${MYSQL_DC}" --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,通过保存以下命令的输出来创建备份
system-databasesecret 和system-databaseDeploymentConfig 的值:oc get secret system-database -o yaml oc get dc system-mysql -o yaml
$ oc get secret system-database -o yaml $ oc get dc system-mysql -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MySQL 用户和密码的当前值添加到
system-databasesecret 中:oc patch secret/system-database -p "{\"stringData\": {\"DB_USER\": \"${RESULT_MYSQL_USER}\"}}" oc patch secret/system-database -p "{\"stringData\": {\"DB_PASSWORD\": \"${RESULT_MYSQL_PASSWORD}\"}}"$ 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 Copied! Toggle word wrap Toggle overflow 验证 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
$ 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 -dCopy to Clipboard Copied! Toggle word wrap Toggle overflow 手动编辑
system-mysqlDeploymentConfig,将新添加的字段中的 MYSQL_USER 和 MYSQL_PASSWORD 的值设置为system-databasesecret。警告执行此步骤将触发
system-mysqlDeploymentConfig 的重新部署,在 Pod 重新创建时导致临时服务丢失。oc edit dc $MYSQL_DC
$ oc edit dc $MYSQL_DCCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在编辑时,找到
env部分。您应该找到:- name: MYSQL_USER value: <current_mysql_user_value> - name: MYSQL_PASSWORD value: <current_mysql_password_value>
- name: MYSQL_USER value: <current_mysql_user_value> - name: MYSQL_PASSWORD value: <current_mysql_password_value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将该内容替换为:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改并退出。
之后,DeploymentConfig 将重新部署 pod。验证 system-mysql 容器集再次运行并处于正确的状态,并且平台可再次正常工作。例如,您可以检查 DeploymentConfig 是否已设置为 1:
oc get dc ${MYSQL_DC}$ oc get dc ${MYSQL_DC}Copy to Clipboard Copied! Toggle word wrap Toggle overflow pod 应该最近运行:
oc get pods | grep -i system-mysql
$ oc get pods | grep -i system-mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以验证 system-mysql DeploymentConfig 的环境变量现在是否是从 secret 收集:
oc set env "dc/${MYSQL_DC}" --list$ oc set env "dc/${MYSQL_DC}" --listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您应该作为结果的一部分看到:
# MYSQL_USER from secret system-database, key DB_USER # MYSQL_PASSWORD from secret system-database, key DB_PASSWORD
# MYSQL_USER from secret system-database, key DB_USER # MYSQL_PASSWORD from secret system-database, key DB_PASSWORDCopy to Clipboard Copied! Toggle word wrap Toggle overflow MYSQL_USER 和 MYSQL_PASSWORD 不包含特定值。
其他备注:
- 当 system-mysql 重启时,可能会出现 system-app, system-sidekiq 和 system-sphinx pod 的故障转移,但一部可能并不需要重新部署它们。
- 如果 pod 无法恢复,则手动重新部署对应的 DeploymentConfig。
- 为防止故障转移,可以将维护窗口添加到迁移流程中,将这些 DeploymentConfig 缩减为零,然后再重新启动 system-mysql 重新启动并在恢复后再重新启动,并传递就绪度探测。