이전 버전 업그레이드

Tier: Free, Premium, Ultimate Offering: Self-Managed

만약 최신 버전의 GitLab 차트를 업그레이드하려면 업그레이드 가이드를 참조하세요.

고전 버전에 대한 업그레이드 지침이 이 페이지에서 제공됩니다.

3.0 버전으로 업그레이드

3.0.0 릴리스는 업그레이드를 수행하기 위해 수동 단계가 필요합니다.

경고: 업그레이드를 진행하기 전에 백업을 꼭 만들어두십시오. 이러한 단계를 문서에 기록된 대로 수행하지 않으면 데이터베이스 손실이 발생할 수 있습니다. 별도의 백업을 보유하고 있는지 확인하세요.

번들 PostgreSQL을 사용하고 있다면, 이 업그레이드를 수행하는 가장 좋은 방법은 이전 데이터베이스를 백업하고 새로운 데이터베이스 인스턴스로 복원하는 것입니다. 일부 단계는 자동화되어 있으나 선택적으로 일부 단계를 수동으로 수행할 수도 있습니다.

기존 데이터베이스 준비

다음 사항을 유의하세요:

  • 번들 PostgreSQL 차트를 사용하고 있지 않은 경우 (postgresql.install이 false인 경우), 이 단계는 수행할 필요가 없습니다.
  • 동일한 네임스페이스에 여러 차트를 설치한 경우 Helm 릴리스 이름을 데이터베이스 업그레이드 스크립트에 전달해야 할 수도 있습니다. 이 경우에는 예시 명령에 사용되는 bash -s STAGEbash -s -- -r RELEASE STAGE로 바꿔야 합니다.
  • kubectl 컨텍스트의 기본 네임스페이스와 다른 네임스페이스에 차트를 설치한 경우, 네임스페이스를 데이터베이스 업그레이드 스크립트에 전달해야 합니다. 이 경우 -r RELEASE와 함께 -n NAMESPACE STAGE로 사용할 수 있습니다. 현재 컨텍스트의 기본 네임스페이스를 설정하려면 kubectl config set-context --current --namespace=NAMESPACE를 실행하거나 kubectxkubens를 사용하세요.

pre 스테이지에서는 Toolbox의 백업 유틸리티 스크립트를 사용하여 데이터베이스를 백업하고, 이를 구성된 s3 버킷(MinIO가 기본)에 저장합니다:

# GITLAB_RELEASE는 'v'로 시작하는 설치 중인 차트의 버전이어야 합니다: v3.0.0
curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s pre

클러스터 데이터베이스 시크릿 준비

번들 PostgreSQL 차트를 사용하고 있지 않은 경우:

  • global.psql.password.key를 제공했다면, 이 단계는 수행할 필요가 없습니다.
  • global.psql.password.secret를 제공한 경우 추가적으로 global.psql.password.key를 기존 키의 이름으로 설정하여 이 단계를 우회할 수 있습니다.

응용 프로그램 데이터베이스 키의 시크릿 키가 postgres-password에서 postgresql-password로 변경됩니다. 데이터베이스 암호 시크릿을 업데이트하기 위해 아래 두 단계 중 하나를 사용하세요:

  1. 자동으로 생성된 PostgreSQL 암호를 사용하려면, 업그레이드가 새 암호를 생성하도록 이전 시크릿을 삭제하세요. RELEASE-NAMEhelm list의 GitLab 릴리스 이름입니다:

    # 이전 데이터베이스를 복원해야 할 수도 있기 때문에 이전 시크릿의 로컬 사본을 만듭니다
    kubectl get secret RELEASE-NAME-postgresql-password -o yaml > postgresql-password.backup.yaml
    # 새 시크릿을 생성할 수 있도록 시크릿을 삭제합니다
    kubectl delete secret RELEASE-NAME-postgresql-password
    
  2. 동일한 암호를 사용하려면 시크릿을 수정하고, 키를 postgres-password에서 postgresql-password로 변경하세요. 추가적으로, 슈퍼유저 계정을 위한 시크릿을 만들어야 합니다. 그 사용자를 위한 키인 postgresql-postgres-password를 추가하세요:

    # 슈퍼유저 암호를 base64로 인코딩합니다
    echo SUPERUSER_PASSWORD | base64
    kubectl edit secret RELEASE-NAME-postgresql-password
    # EDITOR 창에서 적절한 변경 사항을 적용합니다
    

기존 서비스 삭제

3.0 릴리스는 NGINX Ingress의 불변 필드를 업데이트하므로 먼저 모든 서비스를 삭제해야 합니다. 업그레이드하기 전에 Immutable Field Error, spec.clusterIP에서 자세한 내용을 확인할 수 있습니다.

  1. 영향을 받는 모든 서비스를 삭제하세요. RELEASE_NAMEhelm list의 GitLab 릴리스 이름입니다:

    kubectl delete services -lrelease=RELEASE_NAME
    

경고: 이 작업은 이 차트의 NGINX Ingress에 대한 LoadBalancer의 모든 동적 값을 변경합니다. 사용 중인 경우 전역 Ingress 설정 문서에서 externalIP에 대한 추가 세부 정보를 확인하세요. DNS 레코드를 업데이트해야 할 수 있습니다!

GitLab 업그레이드

표준 절차에 따라 GitLab을 업그레이드하세요. 다음 사항을 추가하세요:

번들 PostgreSQL을 사용 중이라면, 다음 플래그를 업그레이드 명령에 사용하여 마이그레이션을 비활성화하세요:

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

번들 PostgreSQL의 데이터베이스 마이그레이션은 나중에 수행할 예정입니다.

데이터베이스 복원

다음 사항을 참고하세요:

  • 번들에 포함되지 않은 PostgreSQL 차트(postgresql.install이 false인 경우)를 사용하지 않는다면, 이 단계를 수행할 필요가 없습니다.
  • 이 스크립트를 성공적으로 실행하려면 Bash 4.0 이상을 사용해야 하며, bash 연상 배열을 사용해야 합니다.
  1. Toolbox pod의 업그레이드가 완료될 때까지 기다립니다. RELEASE_NAME은 helm list에서 GitLab 릴리스의 이름이어야 합니다.

    kubectl rollout status -w deployment/RELEASE_NAME-toolbox
    
  2. Toolbox pod가 성공적으로 배포된 후, post 단계를 실행합니다:

    이 단계에서 다음을 수행합니다:

    1. webservice, sidekiq, 및 gitlab-exporter 배포의 복제본을 0으로 설정합니다. 이는 백업이 복원되는 동안 다른 응용 프로그램이 데이터베이스를 변경하지 못하게 합니다.
    2. 백업된 데이터베이스를 복원합니다.
    3. 새 버전을 위한 데이터베이스 마이그레이션을 실행합니다.
    4. 첫 번째 단계의 배포를 재개합니다.
    # GITLAB_RELEASE는 설치 중인 차트의 버전이어야 하며, 'v'로 시작해야 합니다: v3.0.0
    curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s post
    

3.0 릴리즈 업그레이드 프로세스 문제 해결

  • Helm 2.14.3 또는 >= 2.16.1을 사용하고 있는지 확인하세요 2.15.x에서의 버그 때문에.
  • 업그레이드 중에 어떤 실패를 보게 된다면, 세부 정보를 확인하기 위해 gitlab-upgrade-check pod의 설명을 확인하는 것이 유용할 수 있습니다:

    kubectl get pods -lrelease=RELEASE,app=gitlab
    kubectl describe pod <gitlab-upgrade-check-pod-full-name>
    
  • helm upgrade를 실행할 때 아래와 같은 오류가 발생할 수 있습니다:

    Error: kind ConfigMap with the name "gitlab-gitlab-shell-sshd" already exists in the cluster and wasn't defined in the previous release.
    Before upgrading, please either delete the resource from the cluster or remove it from the chart
    Error: UPGRADE FAILED: kind ConfigMap with the name "gitlab-gitlab-shell-sshd" already exists in the cluster and wasn't defined in the previous release.
    Before upgrading, please either delete the resource from the cluster or remove it from the chart
    

    오류 메시지에는 gitlab-redis-health, gitlab-redis-headless 등 다른 configmap도 언급될 수 있습니다. 이를 해결하려면, 3.0 릴리즈를 위한 업그레이드 단계에서 언급된 대로 서비스가 제거되었는지 확인하세요. 그 후에, 오류 메시지에 표시된 configmap을 kubectl delete configmap <configmap-name>으로 삭제하세요.