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보다 프로젝트를 통해 클러스터 애플리케이션을 관리하는 것이 훨씬 유연합니다. Cluster 관리 프로젝트로 이주하기 위해서는 GitLab Runners를 사용할 수 있고 Helm에 익숙해야 합니다.

Cluster Management Project로 이주하기

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 v2에서 Helm v3로 이주하는 방법에 대한 공식 Helm 문서에 따라 이주한 후에 Helm v2 릴리스를 정리하세요.

  6. 이 시점에서 이미 Helm v3 릴리스만 있어야 합니다. 이 프로젝트에서 관리하려는 응용 프로그램의 경로를 main ./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
    

    {release}-v{chart_version} 형식으로 된 CHART 열의 버전을 가져와서 ./applications/gitlab-runner/helmfile.yamlversion: 속성을 배포한 버전과 일치하도록 편집하세요. 이 단계는 마이그레이션 중에 버전을 업그레이드하는 것을 방지하는 안전한 단계입니다. 위 명령의 gitlab-managed-apps를 다른 네임스페이스로 앱을 배포했다면 해당 명령에서 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의 gitlabUrlrunnerRegistrationToken이 실수로 덮어써지는 것을 방지합니다.

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

    • Ingress: 기존 차트 문제로 인해 ./gl-helmfile 명령을 실행할 때 spec.clusterIP: Invalid value가 나올 수 있습니다. applications/ingress/values.yaml에서 릴리스 값 덮어쓴 후, omitClusterIP: false 모든 발생을 omitClusterIP: true로 바꾸어야 할 수도 있습니다. 다른 방법으로는 kubectl get services -n gitlab-managed-apps를 실행하여 이에 대한 IP를 수집한 다음 그 명령의 결과로 고쳐쓸 수 있습니다.

    • 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를 설치하는 것이 좋습니다. 이 버전을 설치하려면 프로젝트의 main Helmfile (./helmfile.yaml)에서 applications/cert-manager/helmfile.yaml을 주석 처리하세요. 이렇게 하면 새 버전을 설치하는 파이프라인이 트리거됩니다.
      • 1.20 미만의 Kubernetes 버전을 사용하는 사용자는 프로젝트의 main Helmfile (./helmfile.yaml)에서 applications/cert-manager-legacy/helmfile.yaml을 주석 처리하여 v0.10을 그대로 사용할 수 있습니다.

        경고: Kubernetes가 버전 1.20 이상으로 업그레이드되면 Cert-manager v0.10이 중단됩니다.

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