번들 PostgreSQL 버전 업그레이드
postgresql.install
이 false가 아님)에 해당하며, 외부PostgreSQL 설정에는 해당되지 않습니다.
번들 PostgreSQL 차트를 사용하여 PostgreSQL의 새 주요 버전으로 변경하는 것은 기존 데이터베이스의 백업을 수행한 다음 새 데이터베이스에 복원하는 방식으로 이루어집니다.
7.0.0
릴리즈의 일환으로 기본 PostgreSQL 버전을 12.7.0
에서 14.8.0
으로 업그레이드했습니다. 이는PostgreSQL 차트 버전을
8.9.4
에서 12.5.2
로업그레이드하여 이루어진 것입니다.
이것은 드롭인 교체가 아닙니다. 데이터베이스를 업그레이드하기 위해 수동 단계를 수행해야 합니다.
단계는 업그레이드 단계에 문서화되어 있습니다.
5.0.0
릴리즈의 일환으로 번들 PostgreSQL 버전을 11.9.0
에서 12.7.0
으로 업그레이드했습니다.이것은 드롭인 교체가 아닙니다. 데이터베이스를 업그레이드하기 위해 수동 단계를 수행해야 합니다.
단계는 업그레이드 단계에 문서화되어 있습니다.
4.0.0
릴리즈의 일환으로 번들 PostgreSQL 차트를7.7.0
에서 8.9.4
로 업그레이드했습니다.이것은 드롭인 교체가 아닙니다. 데이터베이스를 업그레이드하기 위해 수동 단계를 수행해야 합니다.
단계는 업그레이드 단계에 문서화되어 있습니다.
번들 PostgreSQL 업그레이드 단계
7.0.0
부터 GitLab 차트는 더 이상 PostgreSQL 인스턴스 내에 파일로 PostgreSQL 자격 증명을 마운트하지 않습니다.이것은
postgresql.auth.usePasswordFiles
를 false
로 설정하여 이루어집니다.즉, 이 구성 요소에 대해 데이터베이스 자격 증명이 비밀번호 파일 대신 환경 변수로 전달됩니다.
이는 업스트림 PostgreSQL 차트의 문제 때문입니다.
PostgreSQL 비밀번호에 대해 환경 변수를 사용하고 싶지 않고 파일을 사용하려는 경우,
다음 단계를 수행하기 전에 PostgreSQL 차트에 대해 비밀번호 파일을 활성화하고
기존 PostgreSQL 비밀번호 비밀 편집 지침을 따라야 합니다.
기존 데이터베이스 준비
다음을 유의하세요:
-
번들 PostgreSQL 차트를 사용하지 않는 경우(
postgresql.install
이 false인 경우),
이 단계를 따를 필요가 없습니다. -
동일한 네임스페이스에 여러 차트를 설치한 경우,
데이터베이스 업그레이드 스크립트에 Helm 릴리스 이름을 전달해야 할 수도 있습니다.
예제 명령에서bash -s STAGE
를bash -s -- -r RELEASE STAGE
로 교체하세요. -
kubectl
컨텍스트의 기본값이 아닌 네임스페이스에 차트를 설치했다면,
데이터베이스 업그레이드 스크립트에 네임스페이스를 전달해야 합니다.
예제 명령에서bash -s STAGE
를bash -s -- -n NAMESPACE STAGE
로 교체하세요.
이 옵션은-r RELEASE
와 함께 사용할 수 있습니다.
다음 명령을 실행하여 컨텍스트의 기본 네임스페이스를 설정할 수 있습니다:
kubectl config set-context --current --namespace=NAMESPACE
, 또는
kubens
from kubectx를 사용하세요.
pre
단계는 Toolbox의 백업 유틸리티 스크립트를 사용하여 데이터베이스 백업을 생성하며,
이는 구성된 s3 버킷(기본값: MinIO)에 저장됩니다:
# GITLAB_RELEASE는 설치 중인 차트의 버전이어야 하며, 'v'로 시작해야 합니다: v6.0.0
curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s pre
기존 PostgreSQL 데이터 삭제
릴리즈를 업그레이드해야 합니다. StatefulSet은 다음 단계에서 재생성될 것입니다.
kubectl delete statefulset RELEASE-NAME-postgresql
kubectl delete pvc data-RELEASE_NAME-postgresql-0
GitLab 업그레이드
다음 추가 사항과 함께 우리 표준 절차에 따라 GitLab을 업그레이드하세요:
업그레이드 명령에 다음 플래그를 사용하여 마이그레이션을 비활성화하세요:
--set gitlab.migrations.enabled=false
우리는 번들된 PostgreSQL에 대한 데이터베이스 마이그레이션을 나중 단계에서 수행할 것입니다.
데이터베이스 복원
다음 사항에 유의하세요:
- 스크립트를 성공적으로 실행하려면 Bash 4.0 이상을 사용해야 합니다. bash 연상 배열을 사용하기 때문입니다.
-
Toolbox 포드의 업그레이드가 완료될 때까지 기다리세요. RELEASE_NAME은
helm list
에서 GitLab 릴리즈의 이름이어야 합니다.kubectl rollout status -w deployment/RELEASE_NAME-toolbox
-
Toolbox 포드가 성공적으로 배포된 다음,
post
단계를 실행하세요:# GITLAB_RELEASE는 설치 중인 차트의 버전으로, 'v'로 시작해야 합니다: v6.0.0 curl -s "https://gitlab.com/gitlab-org/charts/gitlab/-/raw/${GITLAB_RELEASE}/scripts/database-upgrade" | bash -s post
이 단계는 다음과 같은 작업을 수행합니다:
-
webservice
,sidekiq
, 및gitlab-exporter
배포의 복제본을 0으로 설정합니다. 이는 백업이 복원되는 동안 다른 애플리케이션이 데이터베이스를 변경하는 것을 방지합니다. -
사전 단계에서 생성된 백업으로부터 데이터베이스를 복원합니다.
-
새 버전의 데이터베이스 마이그레이션을 실행합니다.
-
첫 번째 단계에서 배포를 재개합니다.
-
데이터베이스 업그레이드 프로세스 문제 해결
-
업그레이드 중에 오류가 발생하는 경우,
gitlab-upgrade-check
포드의 설명을 확인하면 유용할 수 있습니다:kubectl get pods -lrelease=RELEASE,app=gitlab kubectl describe pod <gitlab-upgrade-check-pod-full-name>
기존 PostgreSQL 비밀번호 비밀 편집
7.0.0
업그레이드에만 해당하며, PostgreSQL 서비스 컨테이너 내에서 비밀번호 파일 사용을 강제할 때만 해당합니다.PostgreSQL 차트의 새로운 버전은 비밀에서 비밀번호를 참조하는 데 다른 키를 사용합니다. postgresql-password
및 postgresql-postgres-password
대신 이제 password
및 postgres-password
를 사용합니다. 이러한 키는 값은 변경하지 않고 RELEASE-postgresql-password
비밀에서 변경해야 합니다.
이 비밀은 GitLab 차트에 의해 처음 생성되며 업그레이드 중이나 후에도 변경되지 않습니다. 따라서 비밀을 편집하고 키를 변경해야 합니다.
비밀을 편집한 후, Helm 업그레이드 값에서 postgresql.auth.usePasswordFiles
를 true
로 설정해야 합니다. 기본값은 false
입니다.
다음 스크립트는 비밀을 패치하는 데 도움이 될 수 있습니다:
-
먼저 기존 비밀의 백업을 만드세요. 다음 명령은
-backup
이름 접미사가 있는 새 비밀로 복사합니다:kubectl get secrets ${RELEASE}-postgresql-password -o yaml | sed 's/name: \(.*\)$/name: \1-backup/' | kubectl apply -f -
-
패치가 올바른지 확인하세요:
kubectl get secret ${RELEASE}-postgresql-password \ -o go-template='{"data":{"password":"{{index .data "postgresql-password"}}","postgres-password":"{{index .data "postgresql-postgres-password"}}","postgresql-password":null,"postgresql-postgres-password":null}}'
-
그런 다음 패치를 적용하세요:
kubectl patch secret ${RELEASE}-postgresql-password --patch "$( kubectl get secret ${RELEASE}-postgresql-password \ -o go-template='{"data":{"password":"{{index .data "postgresql-password"}}","postgres-password":"{{index .data "postgresql-postgres-password"}}","postgresql-password":null,"postgresql-postgres-password":null}}')"