markdown # 번들 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 비밀번호 Secret을 편집하고 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
를 실행하거나kubectx
에서 사용하십시오.
pre
단계에서는 데이터베이스의 백업을 생성하여 기존의 s3 버킷 (기본적으로 MinIO)에 저장하는 백업 유틸리티 스크립트인 Toolbox를 사용합니다:
# 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 데이터 삭제
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 pod에 대해 완료될 때까지 기다립니다.
RELEASE_NAME
은helm list
에서 GitLab 릴리스의 이름이어야 합니다.kubectl rollout status -w deployment/RELEASE_NAME-toolbox
-
Toolbox pod가 성공적으로 배포된 후,
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
pod의 설명에서 확인할 수도 있습니다:kubectl get pods -lrelease=RELEASE,app=gitlab kubectl describe pod <gitlab-upgrade-check-pod-full-name>
## 기존 PostgreSQL 비밀번호 Secret 편집
참고:
이것은 `7.0.0` 업그레이드 전용이며, PostgreSQL 서비스 컨테이너 내에서 비밀번호 파일 사용을 강제로 지정하려는 경우에만 해당됩니다.
새 버전의 [PostgreSQL 차트](https://github.com/bitnami/charts/tree/master/bitnami/postgresql)는 Secrets에서 비밀번호를 참조하는 데 다른 키를 사용합니다. 이제 `postgresql-password`와 `postgresql-postgres-password` 대신에 `password`와 `postgres-password`를 사용합니다. 이러한 키는 `RELEASE-postgresql-password` Secret에서 변경해야 합니다. 그러나 값은 변경하면 안 됩니다.
이 Secret은 GitLab 차트에 의해 처음 생성되며 업그레이드 중이든 이후이든 변경되지 않습니다. 따라서 Secret을 편집하여 키를 변경해야 합니다.
Secret을 편집한 후 _반드시_ **Helm 업그레이드 값에서 `postgresql.auth.usePasswordFiles`를 `true`로 설정해야** 합니다. 기본값은 `false`입니다.
다음 스크립트는 Secret을 패치하는 데 도움이 될 수 있습니다:
1. 먼저 기존 Secret의 백업을 만듭니다. 다음 명령은 새로운 Secret에 `-backup` 접미사를 붙여 복사합니다:
```shell
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}}')"