基于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

相关推荐
roman_日积跬步-终至千里3 小时前
【K8s基础】K8s下的Helm和Operator:包管理器与运维程序化
运维·容器·kubernetes
极小狐6 小时前
极狐GitLab 合并请求依赖如何解决?
运维·git·ssh·gitlab·github
技术liul7 小时前
Docker Compose和 Kubernetes(k8s)区别
docker·容器·kubernetes
Ares-Wang13 小时前
kubernetes》》k8s》》Heml
云原生·容器·kubernetes
掉头发的王富贵19 小时前
作为开发者,看完这篇文章就可以快速上手Kubernetes了
后端·容器·kubernetes
梁萌20 小时前
14-DevOps-快速部署Kubernetes
运维·kubernetes·k8s·devops·kubeode
啥都想学的又啥都不会的研究生1 天前
Kubernetes in action-初相识
java·docker·微服务·容器·kubernetes·etcd·kubelet
iangyu1 天前
centos7部署k8s集群
云原生·容器·kubernetes
时迁2471 天前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
极小狐2 天前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab