러너 컨트롤러

러너 컨트롤러 (Runner controllers)

Ultimate 티어 전용이며, GitLab Self-Managed와 GitLab Dedicated에서 사용할 수 있는 실험(Experiment) 기능이에요. 이 기능의 가용성은 피처 플래그로 제어되며, 테스트용으로는 열려 있지만 프로덕션 사용에는 아직 준비되지 않았어요.

출처: 문서

본문

러너 컨트롤러는 잡 라우터(job router)를 통해 라우팅되는 CI/CD 잡에 대한 승인 제어(admission control)를 제공해요. 잡이 실행되기 직전에 잡 라우터가 연결된 러너 컨트롤러에 승인 요청을 보내면, 컨트롤러가 커스텀 정책에 따라 잡을 승인하거나 거부할 수 있어요.

러너 컨트롤러는 인스턴스에 대해 구성되며, 범위(scoping)에 따라 잡에 적용돼요.

러너 컨트롤러는 이런 데에 쓸 수 있어요.

  • 이미지 허용 목록, 리소스 할당량, 보안 요구 사항 같은 커스텀 승인 정책 시행.
  • 용량 관리를 위한 잡 큐잉과 리소스 할당 제어.
  • 실행 전에 잡이 조직 정책을 충족하는지 확인하는 컴플라이언스 시행.
  • 예산 또는 리소스 제약에 따라 잡 실행을 제한하는 비용 제어.

승인 제어 워크플로

잡 라우터로 러너 컨트롤러를 구성하면 승인 제어 워크플로는 다음과 같이 동작해요.

  1. 러너 컨트롤러가 잡 라우터에 연결돼요.
  2. 컨트롤러가 스스로를 등록하고 승인 요청 처리를 시작해요.
  3. 잡에 승인이 필요하면 잡 라우터가 연결된 컨트롤러에 잡 세부 정보를 보내요.
  4. 컨트롤러가 커스텀 정책에 대해 잡을 평가해요.
  5. 컨트롤러가 승인 결정(승인 또는 사유와 함께 거부)을 보내요.
  6. 잡 라우터가 잡 실행을 진행하거나 거부를 보고해요.

거부 사유 보기

러너 컨트롤러가 잡을 거부하면 job_router_failure 실패 사유로 잡이 실패해요. 잡 세부 정보 페이지에는 다음이 포함된 메시지가 표시돼요.

  • 잡 라우터 정보
  • 러너 컨트롤러 정보
  • 러너 컨트롤러가 제공한 거부 사유

Dry run 모드 로깅

러너 컨트롤러가 dry_run 상태일 때는 거부 결정이 강제되지 않고, 잡 라우터(KAS) 백엔드 로그에 정보 메시지로 기록돼요. 이 로그를 사용해 시행(enforcement)을 켜기 전에 컨트롤러의 동작을 검증할 수 있어요.

러너 컨트롤러 상태

러너 컨트롤러는 다음 세 가지 상태 중 하나일 수 있어요.

상태 설명
disabled 기본 상태. 러너 컨트롤러가 승인 요청을 받지 않아요.
enabled 러너 컨트롤러가 승인 요청을 받고, 그 결정이 잡 실행에 영향을 줘요.
dry_run 러너 컨트롤러가 승인 요청을 받아요. 잡 라우터가 결정을 기록하지만 강제하지는 않아요. 시행을 켜기 전에 컨트롤러 동작을 검증하고 배포 위험을 줄이기 위한 전략적 롤아웃에 사용해요.

범위 (Scoping)

러너 컨트롤러는 활성화되려면 범위가 지정되어야 해요. 범위 없이 상태가 enableddry_run이어도 승인 요청을 받지 않아요.

러너 컨트롤러는 상호 배타적인 두 가지 범위 유형을 지원해요.

범위 설명
Instance 러너 컨트롤러가 GitLab 인스턴스의 모든 러너에 대한 잡을 평가해요. 이 범위는 러너 범위와 결합할 수 없어요.
Runner 러너 컨트롤러가 특정 러너에 대한 잡만 평가해요. 하나 이상의 러너에 범위를 지정할 수 있어요. 해당 러너는 인스턴스 러너여야 해요.

그룹, 프로젝트 유형의 추가 범위는 issue 586419에서 제안되고 있어요.

러너 컨트롤러 범위 관리에 대한 자세한 내용은 러너 컨트롤러 API를 참고해요.

러너 컨트롤러 관리하기

러너 컨트롤러는 REST API로 관리해요. 아직 관리용 UI는 없어요.

전제 조건:

  • GitLab 인스턴스에 대한 관리자(administrator) 접근 권한이 있어야 해요.

러너 컨트롤러 구현하기

단계별 가이드는 튜토리얼: 러너 승인 컨트롤러 만들기를 참고해요.

자체 러너 컨트롤러를 구현하려면 다음이 필요해요.

  1. GitLab에 러너 컨트롤러를 만들어요.
  2. 러너 컨트롤러의 범위를 지정해요.
  3. 러너 컨트롤러 토큰을 얻어요.
  4. 토큰으로 잡 라우터에 연결해요.
  5. 잡 라우터에 컨트롤러를 등록해요.
  6. 승인 요청을 처리하고 결정을 보내요.

기술 사양과 protobuf 정의는 GitLab Agent for Kubernetes 저장소의 러너 컨트롤러 문서에서 볼 수 있어요.

관련 주제

더 알아보기

러너 컨트롤러는 잡 라우터 위에서 동작하므로, 먼저 잡 라우터의 개념을 이해해 두면 훨씬 자연스러워요. 직접 구현해 보려면 러너 승인 컨트롤러 만들기 튜토리얼을 따라가 보는 걸 추천해요.