오라클 클라우드 인프라스트럭쳐(OCI) Kubernetes 엔진에서 Jenkins 확장 및 최적화

Jenkins는 개발자가 코드를 자동으로 확인, 구축 및 배포하는 데 계속 사용되는 CI/CD 시스템으로, 새로운 기능을 제공하는 데만 집중할 수 있습니다.

Kubernetes가 출시됨에 따라 분산 및 무공유 아키텍처가 점차 보편화되어 최신 CI/CD 시스템이 모두 Kubernetes에 배포되었습니다. Jenkins의 경우 컨트롤러/에이전트 아키텍처는 대규모 조직 및 개발 팀을 위해 충분히 확장 가능하지 않을 수 있지만, 커뮤니티의 노력 덕분에 Jenkins를 컨테이너화하여 클라우드 네이티브 방식으로 배포할 수 있습니다.

Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 또는 OKE)에서 Jenkins를 호스팅하여 빌드 자동화를 중앙 집중화하고 소프트웨어 프로젝트의 성장에 따라 확장할 수 있습니다. OKE에서 확장 가능한 Jenkins를 구현함으로써 개발자는 민첩성을 갖춘 새로운 서비스를 개발하고 CI/CD 파이프라인을 쉽게 확장할 수 있습니다.

구조

이 상위 레벨 참조 아키텍처는 OKE에서 여러 Jenkins 배치의 예를 보여줍니다. OKE as a Service에 Jenkins를 배포하면 필요에 따라 확장할 수 있습니다.

각 Jenkins 컨트롤러 Pod에는 파이프라인 내역 및 팀이 설치한 추가 플러그인을 유지하기 위해 영구 볼륨이 첨부되어 있습니다. Jenkins 에이전트는 파이프라인 작업이 트리거될 때마다 생성되고 마지막에 자동으로 삭제됩니다.

모든 Jenkins 인스턴스는 로드 밸런서를 통해 또는 Kubernetes 수신을 사용하여 개별적으로 노출될 수 있습니다.

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



oci-jenkins-oke-arch-oracle.zip

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

  • 지역

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

  • 가용성 도메인

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

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

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

  • 로드 밸런서

    Oracle Cloud Infrastructure Load Balancing 서비스는 단일 시작점에서 백엔드에 있는 여러 서버로 트래픽을 자동으로 배포합니다.

  • 보안 목록

    각 서브넷에 대해 서브넷에 들어오고 나가도록 허용해야 하는 트래픽의 소스, 대상 및 유형을 지정하는 보안 규칙을 생성할 수 있습니다.

  • Kubernetes Engine

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

권장사항

다음 권장 사항을 시작점으로 사용하십시오. 요구 사항은 여기에 설명된 구조와 다를 수 있습니다.
  • VCN

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

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

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

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

  • 보안

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

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

  • 로드 밸런서 대역폭

    로드 밸런서를 생성하는 동안 고정 대역폭을 제공하는 미리 정의된 구성을 선택하거나, 대역폭 범위를 설정하고 서비스가 트래픽 패턴에 따라 대역폭을 자동으로 확장하도록 하는 사용자 정의(유연한) 구성을 지정할 수 있습니다. 두 접근 방법 중 하나를 사용하면 로드 밸런서를 생성한 후 언제든지 구성을 변경할 수 있습니다.

  • Oracle Cloud Infrastructure Kubernetes Engine 및 컴퓨트 구성

    최소한 2개의 노드 풀이 OCI Kubernetes Engine에 배포됩니다. 하나는 Jenkins 컨트롤러용이고 다른 하나는 Jenkins 에이전트용입니다.

    비용을 절감하고 전체 솔루션을 최적화하려면 VM.Standard.A1를 사용하는 것이 좋습니다. Jenkins는 ARM 인스턴스와 완벽하게 호환되므로 Jenkins 컨트롤러용 가변 인스턴스입니다. 에이전트 노드 풀의 경우 일반적으로 파이프라인 작업이 단기 및 내결함성이므로 선점 가능 인스턴스를 사용하는 것이 좋습니다.

  • Oracle Cloud Infrastructure Registry

    Oracle Cloud Infrastructure Registry는 이미지를 호스팅하기 위한 전용 OCI 호환 컨테이너 리포지토리입니다. 이 아키텍처에서는 선택 사항이며 필요한 모든 플러그인이 설치된 자체 Jenkins 사용자 정의 이미지를 호스트하는 데 사용할 수 있습니다. 사용자정의 Jenkins 컨트롤러 이미지를 생성하여 보안을 적용하고 일반적으로 사용되는 모든 플러그인을 단일 컨테이너 이미지로 패키지화하는 것이 좋습니다.

고려사항

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

  • 성능 및 확장성

    Kubernetes를 사용하면 개발 팀이 성장하거나 줄어들면서 Jenkins 컨트롤러와 에이전트를 쉽게 확장할 수 있습니다. 또한 파이프라인 작업이 실행될 때마다 에이전트 포드가 생성되므로 파이프라인별 기준에서 이러한 포드가 사용하는 리소스를 사용자정의할 수 있습니다.

  • 가용성

    가용성을 최대화하려면 여러 OKE 노드를 서로 다른 가용성 또는 결함 도메인에 프로비전하는 것이 좋습니다. 또한 자발적 및 비자발적 중단으로부터 Jenkins를 보호하기 위해 포드 중단 예산 및 포드 반친화력과 같은 표준 Kubernetes 메커니즘을 사용할 수 있습니다.

  • 비용

    이 아키텍처의 목적은 OKE에서 Jenkins를 사용할 때 비용을 최소화하는 것입니다. Jenkins 컨트롤러에 대해 ARM 노드를 사용할 수 있으며, 이는 유연한 컴퓨트 인스턴스의 4분의 1을 차지합니다. Jenkins 에이전트의 경우 선점 가능한 인스턴스 노드를 통해 고객은 예산의 절반을 절약할 수 있습니다.

확인

  • Author: Alberto Campagna
  • Contributor: Marta Tolosa