GitLab 업그레이드
GitLab Operator는 GitLab의 버전 간 업그레이드를 관리할 수 있습니다. 이 문서에는 업그레이드 흐름이 내부적으로 어떻게 작동하는지에 대한 백그라운드 컨텍스트와 GitLab 업그레이드를 수행하는 지침이 포함되어 있습니다.
오퍼레이터가 GitLab 업그레이드를 처리하는 방법
컨트롤러 reconcile 루프의 시작 부분에서 오퍼레이터는 현재 버전이 원하는 버전과 일치하는지 확인합니다. - 이러한 버전이 일치하면 정규 reconcile 루프가 실행되어 CR spec에서 제공된 구성을 충족하는 객체가 존재하는지 확인합니다. - 이러한 버전이 일치하지 않으면 정규 reconcile 루프는 여전히 실행되지만 업그레이드 흐름을 처리하기 위해 추가적인 논리 분기가 실행됩니다.
업그레이드 흐름은 다음과 같이 동작합니다: 1. 컨트롤러는 모든 배포를 reconcile합니다. - Webservice 및 Sidekiq 배포는 reconcile되지만 “일시 중지”됩니다. 이는 “이전” 팟이 새로운 배포가 일시 중지되기 전까지 유지되는 것을 의미합니다. 1. Pre-migrations가 실행됩니다. - 이것은 사실상 마이그레이션 작업을 실행하지만 포스트-배포 마이그레이션은 건너뜁니다. 1. 컨트롤러는 Webservice 및 Sidekiq 배포를 일시 중지합니다. 1. 컨트롤러는 새로운 Webservice 및 Sidekiq 팟이 실행될 때까지 기다립니다. 1. Post-migrations가 실행됩니다. - 이것은 마이그레이션 작업을 실행합니다(포스트-배포 마이그레이션을 건너뛰지 않고). 1. 컨트롤러는 Webservice 및 Sidekiq 배포에 롤링 업데이트를 수행합니다. 1. 컨트롤러는 다시 시작된 Webservice 및 Sidekiq 팟이 실행될 때까지 기다립니다.
미래의 reconcile 루프에서는 spec.chart.version
에서 가져온 원하는 버전이 status.version
에서 가져온 현재 버전과 일치하기 때문에 이러한 논리 분기가 건너뜁니다.
GitLab를 업그레이드하는 방법
아래는 GitLab Operator를 사용하여 GitLab 인스턴스를 업그레이드하는 단계입니다.
단계 1
GitLab CR의 spec.chart.version
필드를 새 버전으로 업데이트하십시오. 예:
apiVersion: apps.gitlab.com/v1beta1
kind: GitLab
metadata:
name: gitlab
spec:
chart:
- version: "5.0.6"
+ version: "5.1.1"
values:
...
단계 2
수정된 GitLab CR을 클러스터에 적용하십시오:
kubectl -n gitlab-system apply -f mygitlab.yaml
다음 메시지가 표시됩니다:
gitlab.apps.gitlab.com/gitlab created
단계 3
컨트롤러 로그를 통해 진행 상황을 확인할 수 있습니다:
$ kubectl -n gitlab-system logs deployment/gitlab-controller-manager -c manager -f
2021-09-14T20:59:12.342Z INFO controllers.GitLab Reconciling GitLab {"gitlab": "gitlab-system/gitlab"}
2021-09-14T20:59:12.344Z DEBUG controllers.GitLab version information {"gitlab": "gitlab-system/gitlab", "upgrade": true, "current version": "", "desired version": "5.0.6"}
2021-09-14T20:59:18.168Z INFO controllers.GitLab reconciling Webservice and Sidekiq Deployments (paused) {"gitlab": "gitlab-system/gitlab"}
...
위에서 설명한 업그레이드 흐름에 따라 로그 항목이 표시됩니다.
또한 클러스터에서 GitLab CR 상태를 확인할 수 있습니다:
$ kubectl -n gitlab-system get gitlab
NAME STATUS VERSION
gitlab Preparing 5.2.4
애플리케이션이 준비되고 새 버전으로 업그레이드되면 STATUS
열에 반영된 것을 확인할 수 있습니다.
$ kubectl -n gitlab-system get gitlab
NAME STATUS VERSION
gitlab Running 5.2.4
GitLab 객체 자체의 상태 조건은 애플리케이션에 대해 더 자세한 정보를 제공합니다.
추가적인 업그레이드 고려 사항
GitLab 인스턴스를 업그레이드하기 전에 고려해야 할 추가 주제는 다음과 같습니다.
- PersistentVolumeClaim 구성이 변경될 때 데이터를 복원하는 방법: 이는 특히 오퍼레이터 0.6.4에서 관련이 있었으며 !419에서 오퍼레이터가 정의한 MinIO 객체를 GitLab Helm 차트의 MinIO 객체로 교체했을 때 relevant했습니다.