GitLab Managed Apps에서 Cluster Management Projects로 이관(폐기됨)

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

GitLab Managed Apps는 GitLab 14.0에서 폐기되었으며 사용자가 제어하는 Cluster Management 프로젝트를 선호합니다. 프로젝트를 통해 클러스터 애플리케이션을 관리하면 GitLab Managed Apps보다 더 유연하게 클러스터를 관리할 수 있습니다. 클러스터 관리 프로젝트로 마이그레이션하려면 GitLab Runners가 필요하며 Helm에 익숙해야 합니다.

클러스터 관리 프로젝트로 이관

GitLab Managed Apps에서 Cluster Management Project로 이관하려면 아래 단계를 따르세요. 또한 예제가 포함된 비디오 동영상도 확인하세요.

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

    • 기본 GitLab Managed Apps 네임스페이스를 덮어쓴 경우, .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 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
    

    {릴리스}-v{차트_버전} 형식인 CHART 열에서 버전을 가져와서 ./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를 실행하여 이 명령에서 얻은 값으로 각 ClusterIP를 덮어써 문제를 해결하세요.

    • Vault: Helm v2에서 사용한 차트에서 Helm v3에서 사용하는 차트로 인한 중요한 변경 사항이 소개되었습니다. 이 Cluster Management Project와 통합하는 유일한 방법은 실제로이 앱을 제거하고 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. 이전의 모든 단계를 따른 후, 매뉴얼으로 파이프라인을 실행하고 apply 작업 로그를 확인하여 애플리케이션이 성공적으로 감지되고 설치되었는지, 예상치 못한 업데이트가 있는지 확인하세요.

    일부 주석 체크섬과 다음 속성이 업데이트되었는지 확인해야 합니다.

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

성공적인 파이프라인을 받은 후, 이 Cluster Management Project로 관리하려는 다른 배포된 앱에 대해 이러한 단계를 반복하세요.

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에서 클러스터 관리 프로젝트로의 이전 방법을 확인할 수 있습니다: