升级绑定的 PostgreSQL 版本

note这些步骤适用于使用捆绑的 PostgreSQL chart(postgresql.install 不是 false),而不适用于外部 PostgreSQL 设置。

使用捆绑 PostgreSQL chart 更改到 PostgreSQL 的新主要版本,是通过备份现有数据库,然后恢复到新数据库完成的。

作为 5.0.0 版本 chart 的一部分,我们将捆绑的 PostgreSQL 版本从 11.9.0 升级到 12.7.0。这不是直接升级,需要执行手动步骤来升级数据库。这些步骤已记录在升级步骤 中。

升级捆绑 PostgreSQL 的步骤

准备已有的数据库

请注意以下事项:

  • 如果您没有使用捆绑的 PostgreSQL chart(postgresql.install 为 false),则不需要执行这些步骤。
  • 如果您在同一个命名空间中安装了多个 chart。可能还需要将 Helm 版本名称传递给数据库升级脚本。在后面提供的示例命令中将 bash -s STAGE 替换为bash -s -- -r RELEASE STAGE
  • 如果您将 chart 安装到除 kubectl 上下文默认值之外的命名空间,则必须将该命名空间传递给数据库升级脚本。在后面提供的示例命令中将 bash -s STAGE 替换为 bash -s -- -n NAMESPACE STAGE。此选项可以与-r RELEASE 一起使用。您可以通过运行 kubectl config set-context --current --namespace=NAMESPACE 或使用 kubens from kubectx 来设置上下文的默认命名空间。

pre 阶段将使用 Task Runner 中的备份实用程序脚本创建数据库备份,该脚本将保存到配置的 s3 存储桶(默认为 MinIO):

# GITLAB_RELEASE should be the version of the chart you are installing, starting with 'v': v5.0.0
curl -s "https://gitlab.cn/gitlab-cn/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s pre

删除已有的 PostgreSQL 数据

note由于 PostgreSQL 数据格式已更改,因此升级需要在升级版本之前删除现有的 PostgreSQL StatefulSet。 StatefulSet 将在下一步中重新创建。
caution确保您已在上一步中创建了数据库备份。 如果没有备份,极狐GitLab 数据将会丢失。
kubectl delete statefulset RELEASE-NAME-postgresql
kubectl delete pvc data-RELEASE_NAME-postgresql-0

升级极狐GitLab

按照我们的标准程序 升级极狐GitLab,并添加以下内容:

在升级命令中使用以下标志禁用迁移:

  1. --set gitlab.migrations.enabled=false

我们将在稍后的步骤中为捆绑的 PostgreSQL 执行数据库的迁移。

恢复数据库

请注意以下事项:

  • 您需要使用 Bash 4.0 或更高版本才能成功运行脚本,因为它需要使用 bash 关联数组。
  1. 等待 Task Runner pod 的升级完成。 RELEASE_NAME 应该是 helm list 中 GitLab 版本的名称

    kubectl rollout status -w deployment/RELEASE_NAME-task-runner
    
  2. Task Runner pod 部署成功后,运行 post 步骤:

    # GITLAB_RELEASE should be the version of the chart you are installing, starting with 'v': v5.0.0
    curl -s "https://gitlab.cn/gitlab-cn/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s post
    

    此步骤将执行以下操作:

    1. webservicesidekiqgitlab-exporter deployment 的副本设置为 0。这将防止任何其它应用程序在恢复备份时更改数据库。
    2. 从前阶段创建的备份恢复数据库。
    3. 为新版本运行数据库迁移。
    4. 恢复第一步中的所有 deployment。

数据库升级过程故障排除

  • 如果您在升级过程中看到任何失败,查看 gitlab-upgrade-check pod 的描述以获取详细信息可能会很有用:

    kubectl get pods -lrelease=RELEASE,app=gitlab
    kubectl describe pod <gitlab-upgrade-check-pod-full-name>