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-checkpod의 설명에서 확인할 수도 있습니다: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}}')"
도움말