GitLab 업그레이드

GitLab Operator는 GitLab 버전 간 업그레이드를 관리할 수 있습니다. 이 문서에는 업그레이드 흐름이 내부적으로 어떻게 작동하는지에 대한 배경 정보와 GitLab 업그레이드를 수행하는 방법에 대한 지침이 포함되어 있습니다.

Operator가 GitLab 업그레이드를 처리하는 방법

컨트롤러 조정 루프의 시작 부분에서, Operator는 현재 버전이 원하는 버전과 일치하는지 확인합니다.

  • 이러한 버전이 일치하면, 일반 조정 루프가 실행되어 CR 사양에서 제공된 구성을 충족하는 객체가 존재하는지 확인합니다.
  • 이러한 버전이 일치하지 않는 경우에도 일반 조정 루프는 여전히 실행되지만, 업그레이드 흐름을 처리하기 위한 추가 논리 분기가 실행됩니다.

업그레이드 흐름은 다음과 같이 작동합니다:

  1. 컨트롤러가 모든 배포(Deployments)를 조정합니다.
    • 웹 서비스(Webservice) 및 사이드킥(Sidekiq) 배포는 조정되지만 “일시 중지(paused)” 상태입니다. 이는 “old” 포드가 새 배포가 일시 중지 해제될 때까지 유지됨을 의미합니다.
  2. 사전 마이그레이션이 실행됩니다.
    • 이는 기본적으로 Migrations 작업을 실행하지만, 배포 후 마이그레이션은 건너뜁니다.
  3. 컨트롤러는 웹 서비스 및 사이드킥 배포의 일시 중지를 해제합니다.
  4. 컨트롤러는 새 웹 서비스 및 사이드킥 포드가 실행 중인지 기다립니다.
  5. 배포 후 마이그레이션이 실행됩니다.
    • 이는 Migrations 작업을 실행합니다(배포 후 마이그레이션을 건너뛰지 않음).
  6. 컨트롤러는 웹 서비스 및 사이드킥 배포에 대해 롤링 업데이트를 수행합니다.
  7. 컨트롤러는 재시작된 웹 서비스 및 사이드킥 포드가 실행 중인지 기다립니다.

향후 조정 루프에서는 원하는 버전(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 인스턴스에 대해 고려해야 할 추가 주제는 다음과 같습니다.