GitLab 업그레이드

GitLab Operator는 GitLab 버전 간의 업그레이드를 관리할 수 있습니다. 이 문서에는 업그레이드 흐름이 실제로 어떻게 작동하는지에 대한 백그라운드 컨텍스트와 GitLab 업그레이드를 수행하는 지침이 포함되어 있습니다.

오퍼레이터가 GitLab 업그레이드를 처리하는 방법

컨트롤러 재조정 루프의 시작에서 오퍼레이터는 현재 버전과 원하는 버전이 일치하는지 확인합니다.

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

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

  1. 컨트롤러는 모든 배포를 재조정합니다.
    • 웹 서비스 및 Sidekiq 배포는 재조정되지만 “일시 중지”됩니다. 즉, “이전” 팟이 새 배포가 일시 중지되기 전까지 유지됩니다.
  2. 사전 이주가 실행됩니다.
    • 이 사전 이주는 사실상 이주 작업을 실행하지만, 배포 이후 이주 작업을 건너뜁니다.
  3. 컨트롤러는 웹 서비스 및 Sidekiq 배포를 재개합니다.
  4. 컨트롤러는 새 웹 서비스 및 Sidekiq 팟이 실행될 때까지 기다립니다.
  5. 사후 이주가 실행됩니다.
    • 이 사후 이주는 이주 작업을 실행합니다(배포 이후 이주 작업을 건너뜁니다).
  6. 컨트롤러는 웹 서비스 및 Sidekiq 배포를 롤링 업데이트합니다.
  7. 컨트롤러는 다시 시작된 웹 서비스 및 Sidekiq 팟이 실행될 때까지 기다립니다.

향후 재조정 루프에서는 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 인스턴스를 업그레이드하기 전에 고려해야 할 추가 주제입니다.