This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
implemented @abrandl @andrewn @swiskow @lmcandrew @o-lluch 2023-09-11

GitLab Dedicated용 용량 계획

요약

본 문서는 FY24-Q3 OKR로 시작된 GitLab Dedicated 테넌트 환경을 위한 인프라 용량 계획을 계획하는 방법을 개요합니다.

GitLab.com 인프라 자원의 포화 예측 정보를 제공하기 위해 구축한 Tamland을 활용합니다. Tamland를 GitLab Dedicated 스택의 일부로 포함하고 테넌트 환경 내에서 예측을 실행할 것을 제안합니다.

Tamland는 SLO 위반 및 해당 날짜를 예측하여 검토하고 조치해야 합니다. Dedicated 팀은 Tamland의 테넌트 측 설정을 소유하고 예측된 SLO 위반을 소유하며, 용량 계획, Dedicated를 포함한 전반적인 가이드를 위한 Scalability::Observability팀의 도움과 지침을 받습니다.

이러한 설정으로 Tamland를 일반적인 도구로 전환하여 Dedicated 테넌트 뿐만 아니라 다양한 환경에서 사용할 수 있도록 하고자 합니다. 장기적으로는 Tamland를 Self-Managed형 설치뿐만 아니라 오픈 소스로도 릴리스 할 수 있는 후보로 여깁니다.

동기

배경: GitLab.com 용량 계획

TamlandScalability::Observability 그룹 소유의 인프라 자원 예측 프로젝트입니다. 이는 SOC 2에 의해 커버되는 제어된 활동인 GitLab.com의 용량 계획을 구현합니다. 현재까지 수백 개의 모니터링된 인프라 컴포넌트에서 예상되는 SLO 위반을 예측하는 데 GitLab.com에서 독점적으로 사용됩니다.

Tamland는 보고서를 생성하며, 예상된 위반 및 기타 모니터링된 컴포넌트에 대한 정보를 포함합니다. 예측된 SLO 위반은 GitLab.com의 용량 계획 이슈 추적기에 발생하는 경고 이슈를 생성합니다.

현재 Tamland는 GitLab.com에 특정하게 프로덕션되어 있습니다:

  1. GitLab.com 특정 매개변수와 가정이 Tamland에 내장되어 있음
  2. 우리는 GitLab.com 전용으로 단일 CI 프로젝트에서 Tamland를 실행

Tamland를 더 일반적으로 사용할 수 있는 도구로 전환하고 GitLab.com의 특정에 독립적으로 만드는 것이 진행 중인 작업의 주제입니다.

예시로, PostgreSQL 서비스인 patroni-cidisk_space 리소스에 대한 포화 예측 플롯을 아래에서 볼 수 있습니다. 90일 예측 기간 내에 soft SLO(85% 포화로 설정) 위반이 예측되었으며, 이에 따라 용량 계획 이슈가 추가로 검토 및 조치를 위해 생성되었습니다. 현재, Scalability::Observability 그룹은 해당 이슈를 검토하고 해당 서비스의 DRI와 해당 포화에 대한 조치를 취하기로 합니다.

image-20230911144743188

GitLab.com 용량 계획에서 우리는 Tamland를 중앙 Thanos에 액세스할 수 있는 예정 CI 파이프라인에서 운영합니다. CI 파이프라인은 원하는 보고서를 생성하고, GitLab Pages에서 노출하며 용량 계획 이슈를 생성합니다. Scalability::Observability은 오픈된 이슈 및 해당 포화에 대한 검토 및 우선 순위 지정을 포함하는 용량 계획 트리지 로테이션을 실행합니다.

문제 발생

GitLab Dedicated 배포 수가 증가함에 따라 Dedicated 테넌트를 위한 용량 계획 프로세스를 수립해야 합니다. 이는 특정 테넌트의 리소스 제약 사항을 즉시 파악하여 해당 리소스가 포화되어 사고를 발생시키기 전에 해당 테넌트의 인프라를 업그레이드할 수 있도록 도와줄 것입니다.

각 Dedicated 테넌트는 완전한 메트릭이 모니터링되는 격리된 GitLab 환경입니다. 이러한 메트릭은 메트릭 디렉터리에 표준화되어 있으며, 이를 기반으로 포화 메트릭과 해당 SLO가 정의되어 있습니다.

각 테넌트의 포화 메트릭에 대한 용량 계획 및 예측을 제공하기 위해 GitLab Dedicated를 위해 Tamland를 설정하려고 합니다.

Tamland는 Scalability::Observability에 의해 개발되었으며 이 팀은 GitLab.com의 용량 계획 프로세스를 소유하고 있지만 Dedicated 환경에 대한 강력한 격리 구현으로 Dedicated 인프라에 대한 액세스 권한이 없습니다. 따라서 기술적 설계 선택 사항은 두 팀이 상호 작용하는 방식에 영향을 미치게 될 것이며, 반대로 팀이 영향을 미칠 것으로 여깁니다. 이러한 고려 사항을 이 문서에 포함시키고 있습니다.

주요 질문

  1. Tamland는 각 테넌트의 Prometheus 데이터에 어떻게 액세스합니까?
  2. Tamland는 어디에서 실행되고 어떻게 확장합니까?
  3. 예측 결과 데이터를 어디에 저장합니까?
  4. 예측을 어떻게 사용합니까?

목표: 이터레이션 0

  1. Tamland는 Dedicated 테넌트와 GitLab.com을 위해 포화 이벤트를 예측하는 데 충분히 유연합니다.
  2. 예측은 적어도 주당 Dedicated 테넌트를 위해 실행됩니다.
  3. Tamland의 출력은 예측 데이터만 포함합니다(플롯, SLO 위반 날짜 등 - 보고서 및 이슈 관리는 제외합니다 - 아래 참조)
  4. Tamland는 추가 검토를 위한 S3 버킷에 출력 데이터를 저장합니다.

목표: 이터레이션 1

이터레이션 0에서 Tamland를 GitLab Dedicated 환경에 통합하고 주기적으로 각 테넌트에 대한 예측 데이터를 생성했습니다.

이 데이터를 사용하고 적용 가능하게 만들기 위해, 이 이터레이션은 GitLab Dedicated를 위한 보고 기능을 제공하는 데 관한 것입니다: 우리는 개별 Tamland 보고서가 포함된 GitLab Pages 배포 정적 사이트를 생성합니다.

기본 Tamland 보고서를 사용하여 테넌트별 보고서를 생성합니다. 향후 이터레이션에서는 GitLab Dedicated 요구 사항에 맞게 특별히 설계된 다른 유형의 보고서를 제공할 수도 있습니다.

목표: 이터레이션 2

예측된 SLO 위반에 대해 주의를 환기시키기 위해 Tamland에는 GitLab 이슈 추적기를 관리하고 용량 경고 이슈를 생성하는 기능이 있습니다. 예를 들어, 용량 경고 트래커를 사용하여 GitLab.com 용량 경고를 관리합니다(https://gitlab.com/gitlab-com/gl-infra/capacity-planning-trackers/gitlab-com/-/issues).

GitLab Dedicated 테넌트의 경우, 위반에 대한 적절한 확신과 함께 예측된 SLO 위반마다 용량 경고 이슈를 생성하고 해당 테넌트의 경고를 구분하기 위해 범위가 지정된 라벨을 사용하기를 제안합니다(자세한 내용은 아래 참조).

비목표

예측 모델 사용자 정의

예측 모델은 정확한 예측을 위해 도메인 지식에 의해 조정되고 정보화되어야 합니다. 이 정보는 Tamland 매니페스트의 일부입니다. 첫 번째 이터레이션에서는 테넌트별 사용자 정의를 지원하지 않지만 이후에 추가할 수 있습니다.

Dedicated에 대한 제안된 디자인: Dedicated 스택의 일부

Dedicated 환경은 완전히 격리되어 있으며 자체 Prometheus 인스턴스를 실행하여 포화 메트릭을 포함한 메트릭을 캡처합니다. Tamland는 각 개별 Dedicated 테넌트 환경에서 실행되어 Prometheus에서 메트릭을 소비하고 결과 데이터를 S3에 저장합니다. 거기서 우리는 예측 데이터를 소비하고 이에 대해 조치를 취합니다.

dedicated-capacity-planning-forecasting

예측 생성

출력 및 캐시용 리포지터리

Tamland가 의존하는 모든 데이터는 S3 버킷에 저장됩니다. 테넌트 당 하나의 버킷을 사용하여 테넌트 간 데이터를 명확히 분리합니다.

  1. 결과 예측 데이터 및 기타 출력물
  2. Tamland의 내부 캐시로 Prometheus 메트릭 데이터

S3 버킷을 제외한 Tamland 실행 간에는 지속적인 상태가 필요하지 않습니다.

테넌트 환경 내에서 실행하는 것의 이점

단일 환경(테넌트)에 대한 Tamland 실행은 몇 시간이 걸릴 수 있습니다. 테넌트 수가 크게 증가할 것으로 예상되므로, Tamland의 실행 환경을 확장해야 합니다.

이 디자인에서 Tamland는 Dedicated 스택의 일부이자 개별 테넌트 환경의 컴포넌트가 됩니다. 따라서, 테넌트 예측은 각자의 환경에서 병렬로 실행되기 때문에 Tamland의 실행 환경의 확장은 설계에 의해 해결됩니다.

배포 모델: Docker + Helm 차트

Tamland는 Docker 이미지로 릴리스되며 Helm 차트와 함께 제공됩니다. 자세한 내용은 Tamland의 README를 참조하십시오.

Tamland Manifest

이 매니페스트에는 예측할 포화 메트릭에 대한 정보가 포함되어 있습니다(GitLab.com의 경우 이 매니페스트 예시 참조). 이 매니페스트는 메트릭 카탈로그에서 생성되며 처음에는 모든 테넌트에 대해 동일합니다.

메트릭 카탈로그에서 매니페스트를 생성하려면 tamland-dedicated라는 전용 GitLab 프로젝트를 설정합니다. 정기적으로 예정된 파이프라인을 사용하여 메트릭 카탈로그를 가져와서 이를 기반으로 JSON 매니페스트를 생성하고 이를 프로젝트에 커밋합니다.

Dedicated 테넌트에서는 tamland-dedicated에서 커밋된 JSON 매니페스트의 최신 버전을 다운로드하여 Tamland를 실행하는 데 입력으로 사용합니다.

용량 계획 보고서 및 용량 경고

Tamland의 예측 데이터를 기반으로 우리는 예측 정보를 표시하고 팀이 용량 경고를 생성하여 조치를 취할 수 있도록 보고서를 생성합니다.

dedicated-capacity-planning-reporting

Scalability::Observability 팀은 내부 GitLab 프로젝트 ‘gitlab-dedicated’를 유지합니다. 이 프로젝트에는 내부적으로만 사용 가능한 정적 사이트로 배포되는 정기적인 CI 파이프라인이 포함되어 있습니다. 또한, 이 프로젝트에는 이슈 트래커에서 용량 경고를 생성하고 관리하는 기능이 포함되어 있습니다.

이 프로젝트의 CI 구성에는 각 테넌트 및 해당 메타데이터(예: AWS 계정, 코드명 등) 디렉터리이 포함되어 있습니다.

구성된 각 테넌트에 대해 CI 파이프라인은 amp 계정의 중앙 IAM 역할을 사용합니다. 이 역할을 사용하여 테넌트별 IAM 역할을 가정할 수 있으며, 해당 IAM 역할은 테넌트의 예측 데이터가 포함된 S3 버킷에 대한 읽기 전용 액세스 권한을 가지고 있습니다.

CI 파이프라인은 각 테넌트에 대해 표준 Tamland 보고서를 작성하고 모든 개별 보고서를 단일 정적 사이트로 통합합니다. 이 사이트는 테넌트 환경 전체에서 용량 예측 통찰을 제공합니다.

보고서와 함께, CI 파이프라인은 예상된 SLO 위반에 반응하여 이 프로젝트의 이슈 트래커에 용량 경고 이슈를 생성합니다. 이 트래커는 모든 GitLab Dedicated 테넌트에 사용되는 것이므로 테넌트 환경을 구별하기 위해 ~tenant:CN 라벨을 사용합니다(예: 우리는 코드명 C1의 테넌트에 대해 ~tenant:C1을 사용합니다). 이러한 이슈는 테넌트 및 영향을 받는 컴포넌트에 대한 자세한 정보뿐만 아니라 예측 데이터와 상태 정보가 포함됩니다. 여기에 있는 의도는 예측된 SLO 위반에 대한 가시성을 조성하고 Dedicated 팀이 용량 경고에 직접 참여할 방법을 제공하는 것입니다(예: 토론, 작업 일정 등).

전반적으로 Dedicated 팀과 운영자는 Tamland 보고서와 이슈 트래커를 활용하여 용량 경고에 대한 조치를 취합니다.

시작하려면 Dedicated 그룹에게 용량 경고를 정기적으로 검토하고 분류할 것을 제안합니다. 추가적인 가시성을 위해 새로운 용량 경고가 작성될 때 Slack 업데이트를 활성화하는 것을 고려할 수 있습니다.

대안 솔루션

Tamland as a Service(선택되지 않음)

앞으로 고려하지 않을 대안 디자인은 Tamland를 서비스로 설정하고 테넌트 환경 바깥에서 완전히 실행하는 것입니다.

dedicated-capacity-planning-as-a-service

이 디자인에서 Tamland를 실행하기 위해 중앙 Prometheus/Thanos 인스턴스가 필요합니다. Dedicated 테넌트는 Prometheus 데이터를 중앙 Thanos 인스턴스로 푸시하기 위해 원격 쓰기를 사용합니다.

Tamland는 정기적으로 실행되고 단일 Thanos 인스턴스에서 메트릭 데이터를 소비합니다. 다른 디자인과 마찬가지로 결과와 캐시를 S3에 저장합니다.

정기적으로 예측을 실행하기 위해서는 Tamland를 실행할 환경을 제공해야 합니다. 테넌트 수가 증가함에 따라 이 클러스터의 리소스를 확장해야 합니다.

이 디자인은 기술적 및 조직적 고려사항 때문에 선택되지 않았습니다:

  1. 저희 중앙 Thanos 인스턴스는 FY24Q3 시작 시점을 기준으로 Dedicated 테넌트의 메트릭 데이터가 없습니다.
  2. 확장 가능한 실행 환경을 설정하기 위해 추가 작업이 필요합니다.
  3. Thanos는 모든 테넌트에 대한 데이터를 제공하므로 높은 수의 테넌트에 대해 예측을 실행할 때 오버로드의 위험이 있습니다.
  4. Tamland를 보다 일반적으로 사용할 수 있는 도구로 개선하는 것이 목표이며, 서비스로 제공하지 않고 다른 팀이 이를 사용하도록 도구로 개발할 것으로 예상됩니다. 장기적으로 Tamland(도구로)을 Self-Managed 환경 내에 통합하거나 Tamland를 오픈소스 예측 도구로 게시할 수 있을 것으로 기대됩니다. 이는 서비스로 호스팅하는 경우 불가능할 수 있습니다.