基于helm的方式在k8s集群中部署gitlab - 升级(三)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署(一),本篇重点对gitlab在k8s集群中进行升级

文章目录

    • [1. gitlab 升级](#1. gitlab 升级)
      • [1.1 获取release](#1.1 获取release)
      • [1.2 下载目前版本的gitlab charts](#1.2 下载目前版本的gitlab charts)
      • [1.3 获取当前的values文件](#1.3 获取当前的values文件)
      • [1.4 升级](#1.4 升级)
    • [2. gitlab数据库升级](#2. gitlab数据库升级)
      • [2.1 备份数据库](#2.1 备份数据库)
      • [2.2 删除已有的 PostgreSQL 数据](#2.2 删除已有的 PostgreSQL 数据)
      • [2.3 升级数据库](#2.3 升级数据库)
      • 2.4验证

1. gitlab 升级

本次升级从15.8.0升级到15.11.10

1.1 获取release

复制代码
helm list -n jihulab

1.2 下载目前版本的gitlab charts

复制代码
helm repo update #更新repo源
helm search repo  gitlab-jh -l #查看对应版本的charts
helm fetch gitlab/gitlab --version 6.11.10 #拉取目标版本的charts
tar -xf gitlab-6.11.10.tgz
mv gitlab gitlab-15.11.10

1.3 获取当前的values文件

复制代码
cd gitlab-15.11.10
helm get values gitlab -n jihulab > 15.8.0

1.4 升级

复制代码
cd gitlab-15.11.10 #切换目录

helm upgrade gitlab gitlab-jh/gitlab \
--version 6.11.10 \
--timeout 600s  \
--set certmanager.install=false \
--set global.ingress.configureCertmanager=false  \
--set global.ingress.tls.enabled=true \
--set gitlab.webservice.ingress.tls.secretName=gitlab-jihulab-cn-ssl \
--set registry.ingress.tls.secretName=registry-jihulab-cn-ssl \
--set minio.ingress.tls.secretName=minio-jihulab-cn-ssl \
--set nginx-ingress.service.type=NodePort \
--set global.shell.port=31475 \
--values values.yaml -n jihulab

2. gitlab数据库升级

gitlab15.11.10中数据库版本从12.7升级到14.7

参考链接 升级捆绑 PostgreSQL 的步骤

2.1 备份数据库

准备已有的数据库

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

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

这个脚本database-upgrade 的中pre 其实主要是备份数据库,但是由于toolbox容器中没有kubectl命令行工具,因为我这里还是使用的是原始的备份命令backup-utility 来完成数据库的备份操作的。

备份

复制代码
kubectl exec -it -n jihulab gitlab-toolbox-6dd5d8fc59-7nq52 -- backup-utility --skip registry,uploads,artifacts,lfs,packages,external_diffs,terraform_state,ci_secure_files,repositories

备份完后会自动上传到minio中

2.2 删除已有的 PostgreSQL 数据

由于 PostgreSQL 数据格式已更改,因此升级需要在升级版本之前删除现有的 PostgreSQL StatefulSet。 StatefulSet 将在下一步中重新创建。

删除已有的pg数据

复制代码
kubectl delete statefulset gitlab-postgresql --namespace jihulab
kubectl delete pvc data-gitlab-postgresql-0 -n jihulab

2.3 升级数据库

恢复数据库

请注意以下事项:

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

    复制代码
    kubectl rollout status -w deployment/gitlab-toolbox -n jihulab
  2. Toolbox pod 部署成功后,运行 post 步骤:(这块和pre一样,可以通过原生自带命令处理)

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

此步骤将执行以下操作(强烈建议操作此步骤):

  1. webservicesidekiqgitlab-exporter deployment 的副本设置为 0。这将防止任何其它应用程序在恢复备份时更改数据库。

    复制代码
    kubectl scale deployment gitlab-sidekiq-all-in-1-v2 --replicas=0 -n jihulab
    kubectl scale deployment gitlab-webservice-default --replicas=0 -n jihulab
    kubectl scale deployment gitlab-gitlab-exporter --replicas=0 -n jihulab
  2. 从前阶段创建的备份恢复数据库(将minio中的备份数据下载到本地 ,并拷贝到toolbox容器中,备份文件要在容器中的**/srv/gitlab/tmp/backups**目录下)。

  3. 修改values文件

    vim gitlab-15.8.yaml

    复制代码
     ...
     ...
    postgresql:
      existingSecret: bogus
      image:
        tag: 14.8.0
      initdbScriptsConfigMap: bogus
      install: true
    ...
    ...
  4. 升级数据库

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

    在升级命令中使用以下标志禁用迁移:--set gitlab.migrations.enabled=false

    复制代码
    helm upgrade gitlab gitlab-jh/gitlab \
      --version 6.11.10 \
      --timeout 600s  \
      --set certmanager.install=false \
      --set global.ingress.configureCertmanager=false  \
      --set global.ingress.tls.enabled=true \
      --set gitlab.webservice.ingress.tls.secretName=gitlab-jihulab-cn-ssl \
      --set registry.ingress.tls.secretName=registry-jihulab-cn-ssl \
      --set minio.ingress.tls.secretName=minio-jihulab-cn-ssl \
      --set global.shell.port=31475 \
      --set nginx-ingress.service.type=NodePort \
      --set gitlab.migrations.enabled=false  \ #gitlab.migrations.enabled=false必须要加上
      --values gitlab-15.8.yaml -n jihulab
  5. 为新版本运行数据库恢复数据

    进入到toolbox容器中,执行恢复命令

    复制代码
    kubectl exec -it  gitlab-toolbox-6dd5d8fc59-7nq52 -n jihulab /bin/bash
    cd /srv/gitlab/tmp/backups
    backup-utility --restore -t 1688440164_2023_07_04_15.11.10-jh

    1688440164_2023_07_04_15.11.10-jh 是一种格式要求

    最下面的蓝框中的报错可以忽略

  6. 恢复第一步中的所有 deployment

    复制代码
    kubectl scale deployment gitlab-gitlab-exporter --replicas=1 -n jihulab
    kubectl scale deployment gitlab-webservice-default --replicas=2 -n jihulab
    kubectl scale deployment gitlab-sidekiq-all-in-1-v2 --replicas=1 -n jihulab

2.4验证

可以创建issue

相关推荐
engchina7 小时前
WSL Ubuntu で Kubernetes v1.34.2 + Docker 環境を構築する
ubuntu·docker·kubernetes
Gold Steps.10 小时前
OpenEBS — 云原生 CNS 高性能存储
云原生·kubernetes·存储
广州中轴线17 小时前
OpenStack on Kubernetes 生产部署实战(十三)
容器·kubernetes·openstack
切糕师学AI18 小时前
Helm Chart 是什么?
云原生·kubernetes·helm chart
不倒翁玩偶19 小时前
Gitlab拉取代码token换成账号密码登录
gitlab
广州中轴线20 小时前
OpenStack on Kubernetes 生产部署实战(十七)
容器·kubernetes·openstack
xixingzhe220 小时前
ubuntu安装gitlab
linux·ubuntu·gitlab
陈桴浮海1 天前
Kustomize实战:从0到1实现K8s多环境配置管理与资源部署
云原生·容器·kubernetes
张小凡vip1 天前
Kubernetes--k8s中部署redis数据库服务
redis·kubernetes
Hello.Reader1 天前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes