클러스터 자동 스케일링으로 OCI Kubernetes Engine에서 GitLab Runners 배포

자동 스케일링 기능을 갖춘 Oracle Cloud Infrastructure(OCI) Kubernetes Engine에 GitLab Runners를 배포하여 CI/CD 파이프라인의 원활한 실행 작업에 대한 로드에 따라 작업자 노드를 자동으로 확장할 수 있습니다.

구조

이 아키텍처는 OCI Kubernetes Engine(OKE) 클러스터에 배포된 GitLab Runners를 보여줍니다.

다음 다이어그램은 이 참조 아키텍처를 보여 줍니다.

다음은 git-lab-runner-kubernetes.png에 대한 설명입니다.
그림 git-lab-runner-kubernetes.png에 대한 설명

git-lab-러너-쿠버네티스-oracle.zip

구조에는 다음과 같은 구성 요소가 있습니다.

  • 지역

    Oracle Cloud Infrastructure 리전은 가용성 도메인이라고 하는 데이터 센터가 하나 이상 포함된 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).

  • 가용성 도메인

    가용성 도메인은 한 지역 내의 독립형 독립 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 결함 허용을 제공하는 다른 가용성 도메인의 리소스와 격리됩니다. 가용성 도메인은 전원, 냉각 또는 내부 가용성 도메인 네트워크와 같은 인프라를 공유하지 않습니다. 따라서 한 가용성 도메인의 장애가 해당 영역의 다른 가용성 도메인에 영향을 미치지 않아야 합니다.

  • 결함 도메인

    장애 도메인은 가용성 도메인 내의 하드웨어 및 인프라 그룹입니다. 가용성 도메인에는 독립적인 전원 및 하드웨어를 갖춘 3개의 장애 도메인이 있습니다. 여러 결함 도메인에 리소스를 분배할 때 응용 프로그램은 결함 도메인 내의 물리적 서버 오류, 시스템 유지 관리 및 전원 오류를 허용할 수 있습니다.

  • VCN(가상 클라우드 네트워크) 및 서브넷

    VCN은 Oracle Cloud Infrastructure 지역에서 설정한 맞춤형 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷 생성 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.

  • 서비스 게이트웨이

    서비스 게이트웨이는 VCN에서 Oracle Cloud Infrastructure Object Storage와 같은 다른 서비스로의 액세스를 제공합니다. VCN에서 Oracle 서비스로의 트래픽은 Oracle 네트워크 패브릭을 통해 이동하며 인터넷을 순회하지 않습니다.

  • Kubernetes Engine

    Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 또는 OKE)는 컨테이너화된 애플리케이션을 클라우드에 배포하는 데 사용할 수 있는 확장 가능한 고가용성 완전 관리형 서비스입니다. 애플리케이션에 필요한 컴퓨트 리소스를 지정하면 Kubernetes Engine이 기존 테넌시의 Oracle Cloud Infrastructure에서 프로비저닝합니다. OKE는 Kubernetes를 사용하여 호스트 클러스터 전반에서 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화합니다.

  • Cloud Guard

    Oracle Cloud Guard를 사용하여 Oracle Cloud Infrastructure에서 리소스의 보안을 모니터링하고 유지 관리할 수 있습니다. Cloud Guard는 정의 가능한 감지자 레시피를 사용하여 리소스에서 보안 취약점을 검사하고 운영자 및 사용자에게 특정 위험한 작업을 모니터합니다. 잘못 구성되거나 안전하지 않은 작업이 감지되면 Cloud Guard는 정의할 수 있는 응답기 레시피를 기반으로 수정 조치를 권장하고 해당 작업을 수행하는 데 도움을 줍니다.

  • 보안 영역

    보안 영역은 데이터를 암호화하고 전체 구획의 네트워크에 대한 공용 액세스를 방지하는 등의 정책을 적용하여 처음부터 Oracle의 보안 모범 사례를 보장합니다. 보안 영역은 동일한 이름의 컴파트먼트와 연관되며, 컴파트먼트 및 해당 하위 컴파트먼트에 적용되는 보안 영역 정책 또는 "레시피"를 포함합니다. 표준 구획은 보안 영역 구획에 추가하거나 이동할 수 없습니다.

  • Kubernetes 클러스터 자동 스케일러

    Kubernetes 클러스터 자동 스케일러는 노드 풀에 있는 노드의 리소스 활용 대신 리소스 요청에 따라 노드 풀의 크기를 자동으로 늘리거나 줄입니다.

  • OKE 서비스

    OKE(Kubernetes) 서비스는 논리적 Pod 집합과 Pod에 액세스하는 데 사용하는 정책을 정의하는 추상화입니다. 서비스에 의해 타겟팅된 포드 세트는 일반적으로 선택기에 의해 결정된다. Kubernetes 서비스는 자동 확장을 관리합니다.

  • OKE 워커 노드 풀

    Kubernetes 작업자 노드는 Kubernetes 클러스터 내에서 컨테이너화된 애플리케이션을 실행하는 작업자 머신입니다. 모든 클러스터에는 작업자 노드가 하나 이상 있습니다.

    OKE(Kubernetes) 워커 노드 풀은 클러스터 내에서 모두 동일한 구성을 갖는 워커 노드의 하위 집합입니다. 노드 풀을 사용하면 구성이 다른 클러스터 내에 시스템 풀을 만들 수 있습니다. 예를 들어, 한 클러스터에 하나의 노드 풀을 가상 머신으로 만들고 다른 노드 풀을 베어 메탈 머신으로 만들 수 있습니다. 클러스터에는 최소 하나의 노드 풀이 있어야 하지만 노드 풀에는 워커 노드가 포함될 필요가 없습니다.

    노드 풀의 워커 노드는 VCN의 워커 노드 서브넷에 연결됩니다.

  • 인터넷 게이트웨이

    인터넷 게이트웨이는 VCN의 공용 서브넷과 공용 인터넷 간의 트래픽을 허용합니다.

  • NAT(Network Address Translation) 게이트웨이

    NAT 게이트웨이를 사용하면 VCN의 전용 리소스가 수신 인터넷 연결에 이러한 리소스를 노출시키지 않고 인터넷의 호스트에 액세스할 수 있습니다.

권장사항

다음 권장 사항을 시작점으로 사용합니다. 요구 사항은 여기에 설명된 아키텍처와 다를 수 있습니다.
  • VCN

    VCN을 생성할 때 VCN의 서브넷에 연결하려는 리소스 수에 따라 필요한 CIDR 블록 수와 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.

    프라이빗 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.

    VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.

    서브넷을 설계할 때는 트래픽 플로우 및 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 동일한 서브넷에 연결합니다. 이 서브넷은 보안 경계 역할을 할 수 있습니다.

    지역 서브넷을 사용합니다.

  • 보안

    Oracle Cloud Guard를 사용하여 OCI의 리소스 보안을 사전에 모니터링하고 유지 관리할 수 있습니다. Oracle Cloud Guard는 사용자가 정의할 수 있는 감지기 레시피를 사용하여 리소스의 보안 취약성을 검사하고 운영자 및 사용자에게 위험한 작업을 모니터합니다. 잘못된 구성 또는 안전하지 않은 작업이 감지되면 Oracle Cloud Guard는 정의할 수 있는 응답기 레시피를 기반으로 수정 조치를 권장하고 해당 작업을 수행하는 데 도움을 줍니다.

    최대 보안이 필요한 리소스의 경우 Oracle은 보안 영역을 사용할 것을 권장합니다. 보안 영역은 모범 사례를 기반으로 하는 Oracle 정의 보안 정책 레시피와 연관된 컴파트먼트입니다. 예를 들어, 보안 영역의 리소스는 공용 인터넷에서 액세스할 수 없어야 하며 고객 관리 키를 사용하여 암호화해야 합니다. 보안 영역에서 리소스를 생성 및 업데이트할 때 OCI는 보안 영역 레시피의 정책에 대해 작업을 검증하고 정책을 위반하는 작업을 거부합니다.

  • Cloud Guard

    사용자정의 감지기 및 응답기 레시피를 생성하도록 Oracle에서 제공하는 기본 레시피를 복제 및 사용자정의합니다. 이러한 레시피를 통해 경고를 생성하는 보안 위반 유형과 경고에 대해 수행할 수 있는 작업을 지정할 수 있습니다. 예를 들어 가시성이 퍼블릭으로 설정된 오브젝트 스토리지 버킷을 감지할 수 있습니다.

    테넌시 레벨에서 Cloud Guard를 적용하여 가장 광범위한 범위를 다루고 여러 구성을 유지 관리하는 데 따르는 관리 부담을 줄이십시오.

    관리 목록 기능을 사용하여 감지기에 특정 구성을 적용할 수도 있습니다.

  • NSG(네트워크 보안 그룹)

    NSG를 사용하여 특정 VNIC에 적용되는 수신 및 송신 규칙 세트를 정의할 수 있습니다. NSG를 사용하면 애플리케이션의 보안 요구사항과 VCN의 서브넷 아키텍처를 분리할 수 있으므로 보안 목록이 아닌 NSG를 사용하는 것이 좋습니다.

  • OCI Kubernetes 엔진

    운영자는 모든 일반 Kubernetes 클러스터를 지원하지만, 이 아키텍처는 Kubernetes Engine 클러스터를 사용합니다. 이러한 클러스터에는 서로 다른 가용성 및 장애 도메인에 분산된 3개의 작업자 노드가 있습니다. 표시된 클러스터에는 서로 다른 물리적 호스트에 분산된 작업자 노드가 있습니다. 한 클러스터에 최대 1000개의 노드를 만들 수 있습니다.

  • 보안 영역

    최대 보안이 필요한 리소스의 경우 Oracle은 보안 영역을 사용할 것을 권장합니다. 보안 영역은 모범 사례를 기반으로 하는 Oracle 정의 보안 정책 레시피와 연관된 컴파트먼트입니다. 예를 들어, 보안 영역의 리소스는 공용 인터넷에서 액세스할 수 없어야 하며 고객 관리 키를 사용하여 암호화해야 합니다. 보안 영역에서 리소스를 생성 및 업데이트할 때 Oracle Cloud Infrastructure는 보안 영역 레시피의 정책에 대해 작업을 검증하고 정책을 위반하는 작업을 거부합니다.

  • 계산

    적절한 OCPU 및 메모리 조합으로 구성을 선택하고 필요에 따라 Kubernetes 클러스터 노드에 로컬 NVMe 및 블록 스토리지를 프로비저닝합니다.

고려사항

이 참조 아키텍처를 배치할 때는 다음 사항을 고려하십시오.

  • 성능

    클러스터 자동 스케일링은 배치 리소스 예약을 기반으로 하며, gitlab-ci.yaml 파일을 편집하여 작업 리소스 예약을 제어할 수 있습니다.

  • 보안

    기업이 보유하고 있는 Oracle Cloud Infrastructure(OCI) 리소스에 접근할 수 있는 사람과 방법을 제한하는 정책을 사용합니다.

    OCI Kubernetes EngineOCI Identity and Access Management와 통합되어 네이티브 OCI ID 기능을 통해 손쉽게 인증할 수 있습니다.

    다음 변수를 사용하여 작업에 대한 리소스 예약을 제어합니다.

    KUBERNETES_CPU_REQUEST: 1  
    KUBERNETES_MEMORY_REQUEST: 4000M
  • 확장성

    로드에 따라 Kubernetes 클러스터의 워커 노드 수를 업데이트하여 애플리케이션을 스케일 아웃할 수 있습니다. 마찬가지로 클러스터의 워커 노드 수를 줄여 확장할 수 있습니다. Kubernetes 클러스터에서 서비스를 생성할 때 로드 밸런서를 생성하여 해당 서비스에 할당된 노드 간에 서비스 트래픽을 분산할 수 있습니다. 클러스터 자동 스케일링은 배치 리소스 예약을 기반으로 하며, gitlab-ci.yaml 파일을 편집하여 예약을 제어할 수 있습니다.

    주:

    gitlab-ci.yaml 파일에서 매개변수를 사용하여 작업 리소스 예약은 locals.tf 파일에서 다음 행의 일부로 GitLab Runner에 대해 정의된 최대 허용 예약을 초과하지 않아야 합니다.
    cpu_request_overwrite_max_allowed = "1"        
    memory_request_overwrite_max_allowed = "4096M"
  • 비용

    OCI Kubernetes Engine은 무료이며 Oracle 컨테이너 레지스트리를 무료로 사용할 수 있습니다. Kubernetes 클러스터의 노드는 동일한 구성의 다른 컴퓨트 인스턴스와 동일한 요율로 청구됩니다.

배치

Terraform 코드를 사용하면 모든 종속 리소스(네트워킹, 워커 노드 풀)와 함께 OCI Kubernetes 엔진(OKE) 클러스터를 배치하고, 클러스터 자동 스케일링 및 GitLab 러너를 배치할 수 있습니다. 이 코드는 Oracle Cloud Infrastructure Resource Manager에서 샘플 스택으로 제공됩니다. GitHub에서 코드를 다운로드하여 요구 사항에 맞게 커스터마이즈할 수도 있습니다.
  • Oracle Cloud Infrastructure Resource Manager의 샘플 스택을 사용하여 배포합니다.
    1. Go to Oracle Cloud에 배치.

      아직 사인인하지 않은 경우 테넌시 및 사용자 인증서를 입력합니다.

    2. 스택을 배치할 영역을 선택합니다.
    3. 화면의 프롬프트 및 지침에 따라 스택을 만듭니다.
    4. 스택을 생성한 후 Terraform 작업을 누르고 계획을 선택합니다.
    5. 작업이 완료될 때까지 기다린 후 계획을 검토합니다.

      변경하려면 [스택 세부정보] 페이지로 돌아가서 스택 편집을 누르고 필요에 따라 변경합니다. 그런 다음 계획 작업을 다시 실행합니다.

    6. 추가로 변경할 필요가 없으면 [스택 세부 정보] 페이지로 돌아가서 Terraform 작업을 누르고 적용을 선택합니다.
  • GitHub에서 Terraform 코드를 사용하여 배포:
    1. GitHub로 이동합니다.
    2. 저장소를 복제하거나 로컬 컴퓨터에 다운로드합니다.
    3. README 문서의 지침을 따릅니다.

추가 탐색

OCI(Oracle Cloud Infrastructure) 및 Kubernetes에 대해 자세히 알아보십시오.

모범사례는 Oracle Cloud Infrastructure에 대한 모범사례 프레임워크 솔루션 플레이북을 검토하십시오.

다음 추가 OCI 및 GitLab 리소스를 검토하십시오.

확인

  • 작성자: Chandrashekar Avadhani, Andrei Ilas
  • 공헌자: Ben Romine, Lukasz Feldman