Oracle Cloud Infrastructure DevOps을 사용하여 Helm 기반 애플리케이션 배포
클라우드에서 애플리케이션을 효율적으로 실행하려면 소프트웨어를 신속하게 제공해야 합니다. 파이프라인 배포를 통해 소프트웨어 릴리스를 자동화하면 개발자 생산성이 향상되고 보다 자주 오류를 줄일 수 있습니다. 배포 중에 다운타임을 방지하고 애플리케이션 업데이트의 복잡성을 자동화하는 데 도움이 됩니다.
Oracle Cloud Infrastructure DevOps 서비스는 개발자에게 엔드투엔드 연속 배포 환경을 제공합니다. Oracle Cloud Infrastructure DevOps 서비스에는 Oracle Cloud Infrastructure(OCI) 플랫폼(Oracle Cloud Infrastructure Container Engine for Kubernetes, Oracle Functions, Oracle Cloud Infrastructure Compute 인스턴스)까지 연속 소프트웨어 제공 및 배포 프로세스(CD)를 자동화하는 배포 파이프라인이 포함되어 있습니다.
온프레미스 또는 기타 클라우드에서 OCI로 워크로드를 마이그레이션하는 고객 및 OCI에서 새 애플리케이션을 개발하는 고객은 Oracle Cloud Infrastructure를 사용할 수 있습니다.
구조
이 아키텍처는 OCI(Oracle Cloud Infrastructure) DevOps 서비스를 사용하여 코드 저장소의 Helm 차트와 함께 배포된 샘플 NodeJS 애플리케이션을 보여줍니다. 이 애플리케이션은 Oracle Cloud Infrastructure Container Engine for Kubernetes(OKE) 클러스터에 배포됩니다. 프로세스를 간소화하기 위해 인프라 자동화에 Terraform을 사용합니다.
다음 다이어그램은 이 참조 구조를 보여 줍니다.

deploy-helm-based-app.png 그림에 대한 설명
deploy-helm-based-app-oracle.zip
구조에는 다음과 같은 구성 요소가 있습니다.
- 지역
Oracle Cloud Infrastructure 지역은 가용성 도메인이라고 하는 하나 이상의 데이터 센터를 포함하는 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 방대한 거리로 이들을 분리할 수 있습니다(국가 또는 대륙 간).
- VCN(가상 클라우드 네트워크) 및 서브넷
VCN은 Oracle Cloud Infrastructure 영역에서 설정하는 커스터마이징 가능한 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN도 네트워크 환경을 완벽하게 제어할 수 있습니다. VCN에는 VCN을 생성한 후 변경할 수 있는 겹치지 않는 여러 CIDR 블록이 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있으며, 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷을 생성한 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.
- OCI DevOps 프로젝트
OCI DevOps 프로젝트는 CI/CD(지속적인 통합 및 배포) 워크로드를 구현하는 데 필요한 논리적 리소스 그룹입니다. OCI DevOps 리소스는 아티팩트, 배치 파이프라인 및 환경일 수 있습니다. OCI DevOps 프로젝트를 사용하면 OCI DevOps 리소스에 대해 손쉽게 로깅, 모니터링 및 통지를 수행할 수 있습니다.
- 파이프라인 구축
빌드 파이프라인은 소스 코드 저장소에서 커밋 ID를 가져와서 해당 소스 코드를 사용하여 빌드 지침을 실행합니다. 빌드 파이프라인은 빌드 프로세스에 대한 일련의 단계(소프트웨어 아티팩트 빌드, 테스트 및 컴파일, OCI 저장소에 아티팩트 전달, 선택적으로 배치 트리거)를 정의합니다. 빌드 사양 파일에서 빌드 실행의 플로우와 지침을 정의합니다.
-
빌드 단계
빌드 단계는 빌드 파이프라인 실행 중 발생하는 개별 작업입니다. OCI DevOps 빌드 파이프라인에는 다음 세 단계가 포함됩니다.- 빌드 컨테이너:
build_spec.yaml지침을 실행하여 필요한 아티팩트를 컴파일, 빌드 및 준비합니다. - 아티팩트 업로드: 도커 이미지와 같은 모든 준비된 아티팩트가 구성된 Oracle Cloud Infrastructure Registry 저장소로 푸시됩니다.
- 배치 트리거: 배치 파이프라인을 트리거하여 구성된 OKE에 변경 사항을 적용합니다.
- 빌드 컨테이너:
- 배치 파이프라인
배치 파이프라인에는 환경에 아티팩트 세트를 전달하기 위해 충족해야 하는 요구사항이 포함됩니다. 파이프라인에는 파이프라인의 빌딩 블록인 단계가 포함됩니다. 파이프라인에는 직렬 또는 병렬로 실행되는 단계가 있을 수 있으므로 소프트웨어 릴리스의 흐름과 논리를 제어할 수 있습니다.
- 배포 단계
단계는 파이프라인 실행 중에 발생하는 개별 작업입니다. OCI DevOps 배치 파이프라인에는 Helm 차트를 사용하여 Kubernetes 애플리케이션을 배치하기 위해
Deploy Helm라는 사전 정의된 단계 하나만 포함됩니다. Helm 차트 URL 및 선택적values.yaml파일 OCI DevOps 아티팩트는 Deploy Helm 단계에 인수로 전송됩니다. 실행 중 Helm 배치 단계는 Oracle Cloud Infrastructure Registry에서 Helm 차트를 인출하고, 선택적으로 제공된values.yaml파일을 사용하여 구성된 OKE OCI DevOps 환경에 동일하게 적용됩니다. - DevOps 아티팩트
OCI DevOps 아티팩트는 애플리케이션을 구성하는 파일, 바이너리, 패키지, 매니페스트 또는 이미지에 대한 참조 또는 포인터입니다. 아티팩트를 생성할 때 실제 아티팩트의 소스 위치를 OCI DevOps에 알려야 합니다. OCI DevOps는 OCI 컨테이너 레지스트리 및 OCI 아티팩트 레지스트리 저장소를 지원합니다.
- 아티팩트 저장소
아티팩트 저장소는 유사한 아티팩트를 그룹화하는 저장소를 생성합니다. 아티팩트는 생성된 후 저장소에 업로드할 수 있습니다. 이러한 아티팩트는 대상 배치 환경에 전달될 텍스트 파일, 바이너리 및 배치 매니페스트 모음입니다. 각 아티팩트에는 이름(버전)이 있으며, 해당 경로로 구성됩니다. 경로는 아티팩트를 구성하는 문자열입니다.
- Helm
Helm은 Helm 차트 세트로 애플리케이션 배포를 관리하는 Kubernetes용 패키지 관리자로, 다양한 개별 서비스와 해당 주기를 간편하게 관리할 수 있습니다.
Oracle Linux용 Helm 모듈은 Kubernetes 모듈(클러스터)에 Helm을 설치합니다.
- Helm 차트
Kubernetes YAML 매니페스트는 단일 패키지에 결합되어 Kubernetes 클러스터에 배포될 수 있습니다. Helm 차트에는 Kubernetes YAML 매니페스트 파일의 템플리트와 기본 템플리트 값을 제공할
values.yaml파일이 포함되어 있습니다. Helm 차트를 사용하여 응용 프로그램이나 대형 응용 프로그램의 구성 요소를 배치합니다. - OCI 로깅 및 OCI 통지 서비스
Oracle Cloud Infrastructure 로깅 및 Oracle Cloud Infrastructure Notifications 서비스는 배포와 관련된 로그를 저장합니다. 배치 런타임 출력 및 배치의 최종 결과는 로그 항목으로 표시됩니다. OCI 통지 서비스는 배치 프로젝트의 최신 상태 및 해당 리소스에 대한 가시성을 제공하며 필요한 작업을 수행합니다.
- 배치 환경
환경은 아티팩트가 배치된 고객의 컴퓨팅 리소스 모음입니다. 환경은 기능, VM(컴퓨트 가상 머신) 또는 베어메탈 인스턴스 또는 OKE 클러스터일 수 있습니다.
-
Oracle Kubernetes 클러스터(OKE): OCI Container Engine for Kubernetes는 전담 관리되며 확장 가능하며 고가용성 서비스로, 컨테이너화된 애플리케이션을 클라우드에 배포하는 데 사용할 수 있습니다.
-
컴퓨트 인스턴스: OCI 컴퓨트 서비스를 사용하면 클라우드의 컴퓨트 호스트를 프로비저닝하고 관리할 수 있습니다. CPU, 메모리, 네트워크 대역폭, 스토리지 리소스 요구사항을 충족하는 구성으로 컴퓨트 인스턴스를 시작할 수 있습니다.
-
함수: Oracle Functions는 완전 관리형 다중 테넌트이며 확장성이 뛰어나며 온디맨드 FaaS(Functions-as-a-Service) 플랫폼입니다. 엔터프라이즈급 OCI를 기반으로 구축되어 Fn Project 오픈 소스 엔진을 기반으로 합니다.
-
권장 사항
- VCN
VCN을 생성할 때 VCN의 서브넷에 연결할 리소스의 수에 따라 필요한 CIDR 블록 수 및 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.
VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.
이 구조는 공용 VCN을 사용하여 OKE 클러스터를 호스트합니다. 전용 VCN도 사용할 수 있습니다. 이 경우 NAT 게이트웨이를 사용하여 공용 인터넷을 통해 클러스터에 액세스할 수 있습니다.
- 컴퓨트 구성
이 구조는 최소한 리소스가 있는 E4 가변 구성의 Oracle Linux OS 이미지를 사용하여 OKE 클러스터 노드의 컴퓨트 호스트를 호스트합니다. 애플리케이션에 더 많은 메모리 또는 코어가 필요한 경우 다른 구성을 선택할 수 있습니다.
- Kubernetes(Oke)
이 구조는 OKE 클러스터에 대상 끝점으로 배치됩니다. 작업자 노드는 E4 Oracle Linux OS에 배치됩니다. 이 구조는 클러스터에 세 개의 작업자 노드를 사용하지만 각 클러스터에 최대 1,000개의 노드를 생성할 수 있습니다.
- 컨테이너 이미지 레지스트리
이 아키텍처는 레지스트리를 내부용 전용 Docker 레지스트리로 배포합니다. Docker 이미지는 레지스트리로 푸시되고 추출됩니다. 레지스트리를 공용 Docker 레지스트리로 사용하여 인터넷에 액세스할 수 있고 적절한 URL을 알고 있는 모든 사용자가 Oracle Cloud의 공용 저장소에서 이미지를 추출할 수 있습니다. 이 구조에서 동일한 컨테이너 레지스트리를 사용하여 Helm 차트도 저장합니다.
- 아티팩트 레지스트리
이 구조는 OKE 클러스터에서 사용되는 소프트웨어 및 구성에 대한 아티팩트를 만듭니다. 이 구조는 내부용으로 아티팩트 레지스트리 저장소를 생성합니다. 소프트웨어 바이너리, 텍스트 및 배치 구성이 아티팩트 레지스트리 저장소로 업로드되고 다운로드됩니다.
고려 사항
이 참조 구조를 배치할 때는 다음 사항을 고려하십시오.
- Oracle Cloud Infrastructure DevOps 지원 배포
DevOps는 OKE(Kubernetes), 컴퓨트 호스트 및 Oracle Functions에 대한 배치를 지원합니다. 이 구조는 Helm 차트를 사용하여 OKE 클러스터에 배치됩니다. 요구사항에 따라 다른 끝점에 배치하는 것이 좋습니다.
- 지원되는 호스트
Oracle Cloud Infrastructure Compute 인스턴스에 대한 인스턴스 그룹 배치에는 Linux 호스트만 지원됩니다.
- 아티팩트
Oracle Cloud Infrastructure DevOps로 배포할 아티팩트는 Oracle Cloud Infrastructure 아티팩트 레지스트리 또는 컨테이너 이미지 레지스트리 저장소에 있어야 합니다.
- 프로젝트
모범 사례는 각 애플리케이션과 모든 마이크로서비스를 단일 프로젝트로 그룹화하는 것입니다.
배치
이 참조 아키텍처의 Terraform 코드는 GitHub에서 사용할 수 있습니다.
- Oracle Cloud Infrastructure Resource Manager의 샘플 스택을 사용하여 배포합니다.
을 누릅니다.
아직 사인인하지 않은 경우 테넌시 및 사용자 인증서를 입력합니다.
- 스택을 배치할 영역을 선택합니다.
- 화면의 프롬프트와 지침에 따라 스택을 생성합니다.
- 스택을 생성한 후 Terraform 작업을 누르고 계획을 선택합니다.
- 작업이 완료될 때까지 기다린 후 계획을 검토합니다.
내용을 변경하려면 [스택 세부정보] 페이지로 돌아가서 스택 편집을 누르고 필요에 따라 변경합니다. 그런 다음 계획 작업을 다시 실행합니다.
- 추가 변경이 필요하지 않은 경우 스택 세부정보 페이지로 돌아가서 Terraform 작업을 누르고 적용을 선택합니다.
- GitHub에서 Terraform 코드를 사용하여 배포합니다.
- GitHub로 이동하십시오.
- 저장소를 로컬 컴퓨터에 복제하거나 다운로드합니다.
README문서의 지침을 따릅니다.