GitLab 관리 앱에서 클러스터 관리 프로젝트로 마이그레이션(지원 중단)

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

GitLab 관리 앱은 GitLab 14.0에서 지원이 중단되었으며 사용자가 제어하는 클러스터 관리 프로젝트를 선호합니다. 프로젝트를 통해 클러스터 응용 프로그램을 관리하면 기존의 GitLab 관리 앱보다 훨씬 유연하게 클러스터를 관리할 수 있습니다. 클러스터 관리 프로젝트로 마이그레이션하려면 GitLab 러너가 있어야 하고 Helm에 익숙해져 있어야 합니다.

클러스터 관리 프로젝트로 마이그레이션

GitLab 관리 앱에서 클러스터 관리 프로젝트로 마이그레이션하려면 아래 단계를 따르세요. 예시로 비디오 설명서도 확인하세요.

  1. 클러스터 관리 프로젝트 템플릿을 기반으로 새 프로젝트를 생성합니다.
  2. 클러스터 내 이 프로젝트에 에이전트를 설치합니다.
  3. .gitlab-ci.yml에서 지침에 따라 KUBE_CONTEXT CI/CD 변수를 새로 설치된 에이전트의 컨텍스트로 설정합니다.
  4. 미리 구성된 .gitlab-ci.yml 파일을 사용하여 Helm v2 릴리스로 배포된 앱을 감지합니다:

    • 기본 GitLab 관리 앱의 네임스페이스를 덮어쓴 경우, .gitlab-ci.yml을 편집하여 스크립트가 올바른 네임스페이스를 매개변수로 받는지 확인합니다:

      script:
        - gl-fail-if-helm2-releases-exist <your_custom_namespace>
      
    • 기본 이름(gitlab-managed-apps)을 유지한 경우, 스크립트가 이미 설정되어 있습니다.

    두 경우 모두 매뉴얼으로 파이프라인 실행하고 detect-helm2-releases 작업 로그를 확인하여 Helm v2 릴리스가 있는지 및 식별된 릴리스를 확인하세요.

  5. Helm v2 릴리스가 없으면 이 단계를 건너뜁니다. 그렇지 않으면 정식 Helm 문서를 참조하여 Helm v2에서 Helm v3로 마이그레이션하는 방법을 따르고, 마이그레이션이 성공적으로 이루어졌다고 확신이 든 후에 Helm v2 릴리스를 정리합니다.

  6. 이 시점에는 이미 Helm v3 릴리스만을 가져야 합니다. 관리할 응용 프로그램의 경로를 메인 ./helmfile.yaml에서 주석을 해제하세요. 한꺼번에 관리할 수 있지만 각 응용 프로그램에 대해 해당 단계를 별도로 반복하여 혼란을 피하세요.

  7. 연관된 applications/{app}/helmfiles.yaml을 편집하여 응용 프로그램에 배포된 차트 버전과 일치시킵니다. GitLab 러너 Helm v3 릴리스를 예로 들면:

    다음 명령은 릴리스 및 해당 버전을 나열합니다:

    helm ls -n gitlab-managed-apps
       
    NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
    runner gitlab-managed-apps 1 2021-06-09 19:36:55.739141644 +0000 UTC deployed gitlab-runner-0.28.0 13.11.0
    

    CHART 열에서 {release}-v{chart_version} 형식의 버전을 가져와서 ./applications/gitlab-runner/helmfile.yamlversion: 속성을 수정하여 배포된 버전과 일치시킵니다. 이렇게 함으로써 마이그레이션 중에 버전을 업그레이드하지 않도록 안전하게 단계를 수행합니다. 만약 앱이 다른 네임스페이스로 배포되었다면, 위 명령에서 gitlab-managed-apps를 해당 명령으로부터 얻은 값으로 대체해야 합니다.

  8. 응용 프로그램과 연관된 applications/{app}/values.yaml을 편집하여 배포된 값을 일치시킵니다. 예를 들어, GitLab 러너의 경우:

    1. 다음 명령의 출력을 복사합니다(크기가 큰 경우가 있을 수 있음):

      helm get values runner -n gitlab-managed-apps -a --output yaml
      
    2. 이전 명령의 출력으로 applications/gitlab-runner/values.yaml를 덮어씁니다.

    이 안전한 단계는 예기치 않은 기본값이 배포된 값을 덮어쓰지 않도록 보장합니다. 예를 들어, GitLab 러너의 gitlabUrl이나 runnerRegistrationToken이 실수로 덮어써지지 않도록 보장합니다.

  9. 특별한 주의가 필요한 일부 앱:

    • Ingress: 기존 차트 문제로 인해 .gitlab-ci.yml 명령을 실행하려고 할 때 spec.clusterIP: Invalid value가 표시될 수 있습니다. applications/ingress/values.yaml에서 릴리스 값을 덮어쓰고, omitClusterIP: false이 모든 발생을 omitClusterIP: true로 설정하는 작업이 필요할 수 있습니다. 다른 방법으로는 kubectl get services -n gitlab-managed-apps를 실행하여 이전 명령의 결과에서 수집한 ClusterIP를 덮어쓰는 방법이 있습니다.

    • Vault: 이 응용 프로그램은 Helm v2에서 사용한 차트와 Helm v3에서 사용하는 차트에서 중요한 변경점이 있습니다. 따라서 이 클러스터 관리 프로젝트와 통합하는 유일한 방법은 실제로 이 응용 프로그램을 제거하고 applications/vault/values.yaml에 제안된 차트 버전을 수용하는 것입니다.

    • Cert-manager:

      • Kubernetes 버전 1.20 이상을 사용하는 사용자의 경우, 지원이 중단된 cert-manager v0.10은 더 이상 유효하지 않기 때문에 업그레이드에는 중요한 변경 사항이 포함된다. 따라서 cert-manager v0.10을 백업 및 제거하는 것을 제안하고 새로운 cert-manager를 설치하는 것을 권장합니다. 이 버전을 설치하려면 프로젝트의 주요 Helmfile인 ./helmfile.yaml에서 applications/cert-manager/helmfile.yaml`을 주석 처리 해제합니다. 이것은 새 버전을 설치하기 위한 파이프라인을 트리거합니다.
      • Kubernetes 버전이 1.20 미만인 사용자의 경우, 프로젝트의 주요 Helmfile인 ./helmfile.yaml에서 applications/cert-manager-legacy/helmfile.yaml`을 주석 처리 해제하여 v0.10을 계속 사용할 수 있습니다.
      caution
      Cert-manager v0.10은 Kubernetes를 1.20 이상으로 업그레이드하면 작동하지 않습니다.
  10. 이전 단계를 따른 후 매뉴얼으로 파이프라인 실행하여 응용 프로그램이 성공적으로 감지되었는지, 설치되었는지, 예상치 못한 업데이트가 있는지를 확인하세요.

    일부 주석 합계 및 다음 속성이 예상대로 업데이트되었기를 기대했지만, 여기에 이 속성이 있습니다:

    --- heritage: Tiller
    +++ heritage: Tiller
    

성공적인 파이프라인을 받은 후에 클러스터 관리 프로젝트로 관리하고 싶은 다른 배포된 앱에 대해 이러한 단계를 반복하세요.

cert-manager v0.10 백업 및 제거

  1. cert-manager v0.10 데이터를 백업하는 방법에 대한 공식 문서를 참조하세요.
  2. applications/cert-manager/helmfile.yaml 파일에서 모든 installed: true 발생을 installed: false로 편집하여 cert-manager를 제거합니다.
  3. 다음 명령을 실행하여 남은 리소스를 검색합니다: kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges,Secrets,ConfigMaps -n gitlab-managed-apps | grep certmanager.
  4. 이전 단계에서 찾은 각 리소스에 대해 kubectl delete -n gitlab-managed-apps {ResourceType} {ResourceName}을 사용하여 해당 리소스를 삭제합니다. 예를 들어, ConfigMap 타입의 cert-manager-controller라는 리소스를 찾았다면 다음과 같이 실행하여 해당 리소스를 삭제합니다: kubectl delete configmap -n gitlab-managed-apps cert-manager-controller.

비디오 워크스루

다음은 GMA에서 Cluster Management 프로젝트로 이전하는 방법에 대한 예제가 포함된 비디오를 시청할 수 있습니다:

  • 새로운 클러스터 관리 프로젝트를 사용하여 처음부터 이전하는 방법에 대한 이전 과정. 또한 Helm v2 앱 이주를 다룹니다.
  • 기존의 GitLab 관리 앱 CI/CD 프로젝트에서 이전하는 방법에 대한 이전 과정.