GitLab 관리 앱에서 클러스터 관리 프로젝트로 마이그레이션하기 (사용 중단)

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

GitLab 관리 앱은 GitLab 14.0에서 사용 중단되었으며
사용자가 제어하는 클러스터 관리 프로젝트를 선호합니다.
프로젝트를 통해 클러스터 애플리케이션을 관리하면
이전의 GitLab 관리 앱보다 클러스터를 관리할 수 있는 더 많은 유연성을 제공합니다.
클러스터 관리 프로젝트로 마이그레이션하려면
GitLab Runners 사용 가능 및
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 v2에서 Helm v3로 마이그레이션하는 방법에 대한 공식 Helm 문서를 참조하고,
    성공적으로 마이그레이션되었다고 확신할 수 있을 때 Helm v2 릴리즈를 정리합니다.

  6. 이 단계에서는 이미 Helm v3 릴리즈만 있어야 합니다.
    이 프로젝트로 관리하려는 애플리케이션의 경로를
    주요 ./helmfile.yaml에서 주석 해제합니다.
    한 번에 모두 주석 해제할 수는 있지만, 각 앱에 대해 다음 단계를 별도로 반복하여
    진행 중 혼란을 피하는 것이 좋습니다.

  7. 애플리케이션과 관련된 applications/{app}/helmfiles.yaml
    배포된 차트 버전에 맞게 편집합니다. GitLab Runner 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 Runner의 경우:

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

      helm get values runner -n gitlab-managed-apps -a --output yaml  
      
    2. 이전 명령의 출력을 사용하여 applications/gitlab-runner/values.yaml을 덮어씌웁니다.

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

  9. 일부 애플리케이션은 특별한 주의가 필요합니다:

    • Ingress: 기존의 차트 문제로 인해
      ./gl-helmfile 명령을 실행할 때 spec.clusterIP: Invalid value 오류가 발생할 수 있습니다.
      이를 해결하기 위해 applications/ingress/values.yaml에서 릴리즈 값을 덮어쓴 후
      omitClusterIP: false의 모든 항목을 omitClusterIP: true로 수정해야 할 수 있습니다.
      또 다른 방법은 kubectl get services -n gitlab-managed-apps를 실행하여
      이 IP를 수집하고, 해당 명령에서 얻은 값으로 불만족스러워하는 각 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.yaml에서
        applications/cert-manager/helmfile.yaml의 주석을 해제합니다.
        이는 새로운 버전을 설치하기 위한 파이프라인을 트리거합니다.
      • Kubernetes 버전이 1.20 미만인 경우,
        프로젝트의 주요 Helmfile (./helmfile.yaml)에서
        applications/cert-manager-legacy/helmfile.yaml의 주석을 해제하여 v0.10을 유지할 수 있습니다.

        경고:
        Kubernetes가 1.20 이상의 버전으로 업그레이드되면 cert-manager v0.10이 작동하지 않습니다.

  10. 이전 단계들을 모두 따른 후 파이프라인을 수동으로 실행하고
    apply 작업의 로그를 살펴보아 애플리케이션이 성공적으로 감지되었는지, 설치되었는지 확인합니다.
    또한 예상치 못한 업데이트가 있었는지 확인합니다.

    일부 주석 체크섬이 업데이트될 것으로 예상되며, 다음 속성도 업데이트될 수 있습니다:

    --- 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에서 클러스터 관리 프로젝트로 마이그레이션하는 방법의 예제를 담은 비디오를 시청할 수 있습니다: