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. As with all projects, the items mentioned on this page are subject to change or delay. The development, release, and timing of any products, features, or functionality 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의 수용량 계획

요약

본 문서는 GitLab Dedicated 테넌트 환경에 대한 인프라 수용량 계획을 설정하는 방식에 대해 개괄하고 있으며, FY24-Q3 OKR로 시작된 계획입니다.

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

Tamland는 SLO 위반이 예측되는 날짜를 예측하며, 검토하고 대응해야 합니다. 팀 구성 측면에서 Dedicated 팀은 Tamland의 테넌트 측 설정을 소유하고 SLO 위반을 예측하도록 제안되었으며, Scalability::Observability 팀의 지원과 안내를 받습니다. 이 팀은 Dedicated를 포함한 수용량 계획을 위한 추가적인 개발, 문서 작성 및 전반적인 지침을 제공합니다.

본 설정을 통해 Tamland를 Dedicated 테넌트를 비롯한 다양한 환경에서 사용할 수 있는 보다 일반적인 도구로 만들기를 목표로 합니다. 장기적으로, Tamland를 자체 관리형 설치뿐 아니라 오픈 소스 릴리스의 후보로 간주하고 있습니다.

동기

배경: GitLab.com의 수용량 계획

TamlandScalability::Observability 그룹이 소유한 인프라 자원 예측 프로젝트입니다. 이는 GitLab.com의 수용량 계획을 구현하며, SOC 2에서 커버되는 제어 활동입니다. 현재는 수백 개의 모니터링되는 인프라 구성요소 전반에 걸쳐 예상되는 SLO 위반을 예측하기 위해 GitLab.com에서 독점적으로 사용됩니다.

Tamland는 예상된 SLO 위반을 포함한 포화 예측 플롯, 모니터된 구성요소에 대한 정보 등을 포함하는 보고서 (GitLab Pages에 호스팅된 내부 링크)를 작성합니다. 예측된 SLO 위반은 GitLab.com의 수용량 계획 이슈 추적기에 생성된 수용량 경고 이슈로 이어집니다.

현재 Tamland는 GitLab.com에 맞춤화되어 있으며 특정합니다:

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

Tamland를 보다 일반적으로 사용할 수 있는 도구로 변환하고 GitLab.com과는 독립적으로 만드는 작업이 진행 중입니다.

예를 들어, 아래의 disk_space 리소스에 대한 포화 예측 플롯을 살펴볼 수 있습니다. 이는 patroni-ci라는 PostgreSQL 서비스를 위한 것입니다. 90일간의 예측 범위 내에서 소프트 SLO(포화율 85%로 설정) 위반을 예측하고, 이로 인해 수용량 계획 이슈가 생성되어 추가 검토 및 조치가 이뤄졌습니다. 현재 Scalability::Observability 그룹은 해당 이슈를 검토하고 해당 서비스의 책임을 지는 담당자와 함께 포화 우려를 해소하고 있습니다.

image-20230911144743188

GitLab.com의 수용량 계획을 위해, 우리는 Central Thanos에 접근할 수 있는 예정된 CI 파이프라인로 Tamland를 실행합니다. 이는 GitLab.com의 포화 및 활용 메트릭을 제공합니다. 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는 전용 테넌트 및 GitLab.com을 별도로 위한 포화 이벤트를 예측할 수 있는 유연성이 있습니다.
  2. 예측은 적어도 매주 전용 테넌트마다 실행됩니다.
  3. Tamland의 출력은 예측 데이터만 포함합니다(플롯, SLO 위반 날짜 등 - 보고서 없음, 이슈 관리 없음 - 아래 참조).
  4. Tamland는 결과 데이터를 추가 검사를 위해 S3 버킷에 저장합니다.

목표: 이터레이션 1

이터레이션 0에서 우리는 Tamland를 GitLab 전용 환경에 통합하고 정기적으로 각 테넌트에 대해 예측 데이터를 생성하기 시작했습니다.

이 데이터를 사용하고 실행 가능하게 만들기 위해, 이 이터레이션은 GitLab 전용을 위한 보고 기능을 제공하는 것입니다: 모든 테넌트에 대한 개별 Tamland 보고서를 포함하는 GitLab Pages에 배포된 정적 사이트를 생성합니다.

우리는 기본적인 Tamland 보고서를 사용하여 테넌트별 보고서를 생성합니다. 향후 이터레이션에서는 GitLab 전용 요구에 특화된 다른 유형의 보고서를 제공할 수 있습니다.

목표: 이터레이션 2

예상된 SLO 위반에 대한 경고를 알리기 위해, Tamland에는 GitLab 이슈 트래커를 관리하고 용량 경고에 대한 이슈를 만드는 기능이 있습니다. 예를 들어, 우리는 gitlab-com capacity planning tracker를 사용하여 GitLab.com의 용량 경고를 관리합니다.

GitLab 전용 테넌트의 경우, 유사한 방식으로 gitlab-dedicated용 용량 계획 트래커를 사용하는 것이 좋습니다: 합리적인 확신을 가지고 예측된 SLO 위반마다 이 트래커에 용량 경고 이슈를 만들고, 서로 다른 테넌트에 대한 경고를 구별하기 위해 범위가 있는 라벨을 사용합니다(자세한 내용은 아래 참조).

비목표

예측 모델 맞춤화

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

전용 환경용 제안된 디자인: 전용 스택의 일부

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

dedicated-capacity-planning-forecasting

예측 생성

출력 및 캐시를 위한 저장소

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

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

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

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

단일 환경(테넌트)에 대한 각 Tamland 실행은 몇 시간이 걸릴 수 있습니다. 테넌트의 예상 증가로 인해, Tamland 실행 환경의 확장을 고려해야 합니다.

이 디자인에서 Tamland는 전용 스택의 일부이자 각 테넌트 환경의 구성 요소가 됩니다. 따라서 Tamland 실행 환경의 확장은 문제가 아닙니다. 왜냐하면 테넌트 예측은 각자의 환경에서 병렬로 실행되기 때문입니다.

분산 모델: Docker + Helm 차트

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

Tamland 매니페스트

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

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

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

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

Tamland의 예측 데이터를 기반으로 보고서를 생성하여 예측 정보를 표시하고 팀이 용량 경고에 대처할 수 있도록 지원합니다.

dedicated-capacity-planning-reporting

확장성::관측 가능성 팀은 내부 GitLab 프로젝트인 gitlab-dedicated을 유지합니다(https://gitlab.com/gitlab-com/gl-infra/capacity-planning-trackers/gitlab-dedicated). 이 프로젝트에는 GitLab Pages에 정적 사이트를 정기적으로 생성하는 스케줄된 CI 파이프라인이 포함되어 있습니다(내부에서만 사용 가능). 이는 또한 이 프로젝트의 이슈 트래커에 용량 경고를 생성하고 관리하기 위한 기능을 포함합니다.

이 프로젝트의 CI 구성에는 AWS 계정, 코드 이름 등과 함께 각 테넌트의 메타데이터 목록이 포함되어 있습니다.

구성된 각 테넌트마다 CI 파이프라인은 amp 계정에서 중앙 IAM 역할을 사용합니다. 이 역할로 특정 테넌트의 S3 버킷에 대한 읽기 전용 액세스를 가진 테넌트별 IAM 역할을 가정할 수 있습니다.

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

보고서와 함께, CI 파이프라인은 예측된 SLO 위반에 반응하여 프로젝트의 이슈 트래커에 용량 경고 이슈를 만듭니다. 트래커는 모든 GitLab 전용 테넌트에 대해 사용되기 때문에 테넌트 환경을 구별하기 위해 ~tenant:CN 라벨을 사용합니다(예를 들어 코딩이 C1인 테넌트의 경우 ~tenant:C1를 사용합니다). 이러한 이슈에는 테넌트 및 영향 받는 구성 요소에 대한 자세한 정보와 예측 및 상태 정보가 포함되어 있습니다. 여기에 의도는 예측된 SLO 위반에 대한 시정을 가능하게 하고 전용 팀이 용량 경고에 직접 참여할 수 있는 방법을 제공하는 것입니다(예: 토의, 작업 일정 등).

전반적으로, 전용 팀과 운영자는 Tamland 보고서 및 이슈 트래커를 사용하여 용량 경고에 대응합니다.

시작하기 위해, 전용 그룹에게 용량 경고를 정기적으로 확인하고 이를 정리하는 것을 제안합니다. 추가적인 가시성을 위해, 새로운 용량 경고에 대해 슬랙 업데이트를 활성화하는 것을 고려할 수 있습니다.

대체 솔루션

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

우리가 현재 고려하지 않는 대체 디자인은 Tamland를 서비스로 설정하고 테넌트 환경 외부에서 완전히 실행하는 것입니다.

dedicated-capacity-planning-as-a-service

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

Tamland는 정기적으로 실행되고 단일 Thanos 인스턴스에서 메트릭 데이터를 소비하도록 설정됩니다. 결과 및 캐시는 다른 디자인과 유사하게 S3에 저장됩니다.

정기적으로 예측을 실행하려면 Tamland가 실행되는 실행 환경을 제공해야 합니다. 테넌트 수가 증가함에 따라 이 클러스터에 대한 자원을 확장해야 합니다.

이 디자인은 기술적 및 조직적 우려로 인해 선택되지 않았습니다:

  1. 현재 우리의 중앙 Thanos 인스턴스에는 Dedicated 테넌트의 메트릭 데이터가 없습니다(FY24Q3 시작 기준).
  2. 확장 가능한 실행 환경 설정에 필요한 추가 작업.
  3. 모든 테넌트의 데이터를 제공하기 때문에 Thanos가 병목 현상으로 인식되며 많은 테넌트의 예측을 실행할 때 과부하의 위험이 있습니다.
  4. Tamland를 보다 일반적으로 사용할 수 있도록 빌드하고 문서 및 프로세스 효율성 면에서 더 나은 결과를 기대합니다. 이를 서비스로 제공하는 것이 아니라 다른 팀이 사용할 수 있는 도구로서 빌드하면 장기적으로 Tamland(도구로)를 자체 관리형 환경 내에 통합하거나 Tamland를 오픈 소스 예측 도구로 게시할 수 있을 것으로 예상됩니다. 이는 서비스로 호스팅하는 경우 불가능할 것입니다.