Argo CD 및 OCI Kubernetes Engine을 통해 GitOps 배포
GitOps는 Git 저장소를 신뢰성 있는 단일 소스로 사용하여 코드형 인프라를 제공하는 CI/CD의 종류입니다. Git 저장소에 소스 코드와 애플리케이션의 구성에서 애플리케이션 전체를 선언적으로 배치하는 것을 권장합니다. 이를 통해 애플리케이션 구성에 변경사항을 배치할 수 있는 일관된 방법을 제공하고, 풀 요청 및 병합 요청과 같이 잘 알려진 Git 워크플로우를 사용하여 버전 제어를 제공합니다.
- 애플리케이션 개발을 위한 표준 워크플로우입니다.
- 애플리케이션 요구 사항을 사전에 설정하기 위한 보안 강화
- Git을 통한 가시성 및 버전 제어로 신뢰성 향상
- 모든 클러스터, 모든 클라우드 및 모든 온프레미스 환경에서 일관성을 유지합니다.
애플리케이션 소스 코드 및 구성에 대해 별도의 Git 저장소를 사용하는 것이 가장 좋습니다. 구성 변경 시 일반적으로 애플리케이션 소스 코드를 변경할 필요가 없으므로 애플리케이션입니다. 저장소가 다르면 CI 빌드를 트리거하지 않고도 애플리케이션 구성을 변경할 수 있습니다.
- Kubernetes 매니페스트
- Helm 차트
- 매니페스트를 사용자 정의합니다.
구조
Argo CD 응용 프로그램은 웹 UI 또는 Argo CD 명령줄 인터페이스를 통해 액세스할 수 있습니다. Argo CD 도구에 대한 연결은 OCI Kubernetes Engine 클러스터에 배포된 로드 밸런서 서비스를 통해 제공됩니다. Argo CD가 배포되면 OCI Kubernetes Engine 클러스터가 필요한 포트에 대한 IP 연결과 Git 저장소에 대한 자격 증명을 가진 한, 내부 또는 외부에서 Oracle Cloud Infrastructure에 호스팅되는 Git 저장소와 동기화되도록 구성합니다. Argo CD가 저장소와 동기화되면 저장소에서 만든 응용 프로그램 구성에 대한 모든 업데이트가 OCI Kubernetes Engine 클러스터에 적용됩니다. Git 저장소 외부의 응용 프로그램이 변경되면 Argo CD는 응용 프로그램이 동기화되지 않은 것으로 간주하고 Git 저장소의 원하는 상태와 일치하도록 변경 사항을 되돌립니다.
다음 다이어그램은 이 참조 아키텍처를 보여 줍니다.
- Tenancy
Oracle Autonomous Transaction Processing은 트랜잭션 처리 워크로드에 최적화된 자동 구동, 자동 보안 및 자동 복구 데이터베이스 서비스입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성은 물론 데이터베이스 백업, 패치, 업그레이드, 튜닝을 처리합니다.
- 지역
Oracle Cloud Infrastructure 지역은 가용성 도메인이라고 하는 데이터 센터가 하나 이상 포함된 지역화된 지리적 영역입니다. 지역은 다른 지역과 독립적이며, 먼 거리가 그들을 분리 할 수 있습니다 (국가 또는 대륙에 걸쳐).
- 구획
구획은 Oracle Cloud Infrastructure 테넌시 내의 영역 간 논리적 파티션입니다. 구획을 사용하여 Oracle Cloud에서 리소스를 구성하고, 리소스에 대한 액세스를 제어하고, 사용량 할당량을 설정합니다. 지정된 컴파트먼트의 리소스에 대한 액세스를 제어하려면 리소스에 액세스할 수 있는 사용자 및 이들이 수행할 수 있는 작업을 지정하는 정책을 정의합니다.
- 가용성 도메인
가용성 도메인은 한 지역 내의 독립형 독립 데이터 센터입니다. 각 가용성 도메인의 물리적 리소스는 결함 허용을 제공하는 다른 가용성 도메인의 리소스와 격리됩니다. 가용성 도메인은 전원, 냉각 또는 내부 가용성 도메인 네트워크와 같은 인프라를 공유하지 않습니다. 따라서 특정 가용성 도메인에서 장애가 발생해도 해당 지역의 다른 가용성 도메인에 영향을 주지 않습니다.
- 결함 도메인
장애 도메인은 가용성 도메인 내의 하드웨어 및 인프라 그룹입니다. 가용성 도메인에는 독립적인 전원 및 하드웨어를 갖춘 3개의 장애 도메인이 있습니다. 여러 결함 도메인에 리소스를 분배할 때 응용 프로그램은 결함 도메인 내의 물리적 서버 오류, 시스템 유지 관리 및 전원 오류를 허용할 수 있습니다.
- VCN(가상 클라우드 네트워크) 및 서브넷
VCN은 Oracle Cloud Infrastructure 지역에 설정하는 커스터마이징 가능한 소프트웨어 정의 네트워크입니다. 기존의 데이터 센터 네트워크와 마찬가지로 VCN을 통해 네트워크 환경을 완벽하게 제어할 수 있습니다. VCN에는 VCN 생성 후 변경할 수 있는 겹치지 않는 CIDR 블록이 여러 개 있을 수 있습니다. VCN을 서브넷으로 분할할 수 있습니다. 서브넷은 지역 또는 가용성 도메인으로 범위가 지정될 수 있습니다. 각 서브넷은 VCN의 다른 서브넷과 겹치지 않는 연속적인 주소 범위로 구성됩니다. 서브넷 생성 후 크기를 변경할 수 있습니다. 서브넷은 공용 또는 전용일 수 있습니다.
- 로드 밸런서
Oracle Cloud Infrastructure Load Balancing Service는 단일 시작점에서 백엔드에 있는 여러 서버로 트래픽을 자동으로 배포합니다. 로드 밸런서는 다양한 애플리케이션에 대한 액세스를 제공합니다.
- 코드 저장소
DevOps 서비스에서 고유의 프라이빗 코드 저장소를 생성하거나 GitHub, GitLab, Bitbucket Cloud와 같은 외부 코드 저장소에 접속할 수 있습니다.
- 보안 목록
각 서브넷에 대해 서브넷에 들어오고 나가도록 허용해야 하는 트래픽의 소스, 대상 및 유형을 지정하는 보안 규칙을 생성할 수 있습니다.
- NAT 게이트웨이
NAT 게이트웨이를 사용하면 VCN의 전용 리소스가 들어오는 인터넷 연결에 리소스를 노출하지 않고도 인터넷의 호스트에 액세스할 수 있습니다.
- 서비스 게이트웨이
서비스 게이트웨이는 VCN에서 Oracle Cloud Infrastructure Object Storage와 같은 다른 서비스로의 접근 권한을 제공합니다. VCN에서 Oracle 서비스로의 트래픽은 Oracle 네트워크 패브릭을 통해 이동하며 인터넷을 통과하지 않습니다.
- Cloud Guard
Oracle Cloud Guard를 사용하여 Oracle Cloud Infrastructure에서 리소스의 보안을 모니터링하고 유지 관리할 수 있습니다. Cloud Guard는 정의 가능한 감지기 레시피를 사용하여 리소스의 보안 취약성을 검사하고 운영자 및 사용자를 모니터하여 위험한 작업을 모니터합니다. 잘못 구성되거나 안전하지 않은 작업이 감지되면 Cloud Guard는 정의할 수 있는 응답기 레시피를 기반으로 수정 조치를 권장하고 해당 작업을 수행하는 데 도움을 줍니다.
- 보안 영역
보안 영역은 데이터를 암호화하고 전체 구획의 네트워크에 대한 공용 액세스를 방지하는 등의 정책을 적용하여 처음부터 Oracle의 보안 모범 사례를 보장합니다. 보안 영역은 동일한 이름의 컴파트먼트와 연관되며, 컴파트먼트 및 해당 하위 컴파트먼트에 적용되는 보안 영역 정책 또는 "레시피"를 포함합니다. 표준 구획을 추가하거나 보안 영역 구획으로 이동할 수 없습니다.
- 오브젝트 스토리지
오브젝트 스토리지를 사용하면 데이터베이스 백업, 분석 데이터, 이미지 및 비디오와 같은 리치 컨텐츠 등 모든 컨텐츠 유형의 대량의 구조적 데이터와 비구조적 데이터에 빠르게 액세스할 수 있습니다. 인터넷 또는 클라우드 플랫폼 내에서 직접 안전하고 안전하게 데이터를 저장하고 검색할 수 있습니다. 성능 또는 서비스 안정성이 저하되지 않고 스토리지를 원활하게 확장할 수 있습니다. 빠르고 즉각적이며 자주 액세스하는 데 필요한 "핫" 스토리지에 표준 스토리지를 사용합니다. 장기간 보존하고 거의 또는 거의 액세스하지 않는 "콜드" 스토리지에 아카이브 스토리지를 사용합니다.
- FastConnect
Oracle Cloud Infrastructure FastConnect는 데이터 센터 및 Oracle Cloud Infrastructure 간 전용 개인 연결을 생성할 수 있는 쉬운 방법을 제공합니다. FastConnect는 인터넷 기반 연결과 비교할 때 더 높은 대역폭 옵션과 더 안정적인 네트워킹 환경을 제공합니다.
- LPG(로컬 피어링 게이트웨이)
LPG를 사용하면 한 VCN을 동일한 지역의 다른 VCN과 피어링할 수 있습니다. 피어링이란 VCN이 인터넷을 순회하거나 온프레미스 네트워크를 통해 라우팅하지 않고 전용(private) IP 주소를 사용하여 통신하는 것을 의미합니다.
- 자율운영 데이터베이스
Oracle Cloud Infrastructure 자율 운영 데이터베이스는 트랜잭션 처리 및 데이터 웨어하우징 워크로드에 사용할 수 있는 완전 관리형 사전 구성 데이터베이스 환경입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성은 물론 데이터베이스 백업, 패치, 업그레이드, 튜닝을 처리합니다.
- Autonomous Data Warehouse
Oracle Autonomous Data Warehouse는 데이터 웨어하우징 워크로드에 최적화된 자가 구동, 자가 보안 및 자가 복구 데이터베이스 서비스입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성은 물론 데이터베이스 백업, 패치, 업그레이드, 튜닝을 처리합니다.
- 자율운영 트랜잭션 처리(ATP)
Oracle Autonomous Transaction Processing은 트랜잭션 처리 워크로드에 최적화된 자동 구동, 자동 보안 및 자동 복구 데이터베이스 서비스입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다. Oracle Cloud Infrastructure는 데이터베이스 생성은 물론 데이터베이스 백업, 패치, 업그레이드, 튜닝을 처리합니다.
- Exadata DB 시스템
Exadata Cloud Service를 사용하면 클라우드에서 Exadata의 기능을 활용할 수 있습니다. 필요에 따라 시스템에 데이터베이스 컴퓨트 서버 및 스토리지 서버를 추가할 수 있는 유연한 X8M 시스템을 프로비저닝할 수 있습니다. X8M 시스템은 고대역폭 및 짧은 대기 시간, PMEM(지속 메모리) 모듈, 지능형 Exadata 소프트웨어를 위해 RoCE(RDMA over Converged Ethernet) 네트워킹을 제공합니다. 쿼터 랙 X8 시스템에 해당하는 구성을 사용하여 X8M 시스템을 프로비저닝한 다음 프로비저닝 후 언제든지 데이터베이스 및 스토리지 서버를 추가할 수 있습니다.
권장사항
- VCN
VCN을 생성할 때 VCN의 서브넷에 연결하려는 리소스 수에 따라 필요한 CIDR 블록 수와 각 블록의 크기를 결정합니다. 표준 전용 IP 주소 공간 내에 있는 CIDR 블록을 사용합니다.
프라이빗 접속을 설정하려는 다른 네트워크(Oracle Cloud Infrastructure, 온프레미스 데이터 센터 또는 다른 클라우드 제공자)와 겹치지 않는 CIDR 블록을 선택합니다.
VCN을 생성한 후 해당 CIDR 블록을 변경, 추가 및 제거할 수 있습니다.
서브넷을 설계할 때는 트래픽 플로우 및 보안 요구사항을 고려하십시오. 특정 계층 또는 역할 내의 모든 리소스를 동일한 서브넷에 연결합니다. 이 서브넷은 보안 경계 역할을 할 수 있습니다.
지역 서브넷을 사용합니다.
- 보안
Oracle Cloud Guard를 사용하여 Oracle Cloud Infrastructure의 리소스 보안을 사전에 모니터링하고 유지 관리할 수 있습니다. Cloud Guard는 정의 가능한 감지기 레시피를 사용하여 리소스의 보안 취약성을 검사하고 운영자 및 사용자를 모니터하여 위험한 작업을 모니터합니다. 잘못 구성되거나 안전하지 않은 작업이 감지되면 Cloud Guard는 정의할 수 있는 응답기 레시피를 기반으로 수정 조치를 권장하고 해당 작업을 수행하는 데 도움을 줍니다.
최대 보안이 필요한 리소스의 경우 Oracle은 보안 영역을 사용할 것을 권장합니다. 보안 영역은 모범 사례를 기반으로 하는 Oracle 정의 보안 정책 레시피와 연관된 컴파트먼트입니다. 예를 들어, 보안 영역의 리소스는 공용 인터넷에서 액세스할 수 없어야 하며 고객 관리 키를 사용하여 암호화해야 합니다. 보안 영역에서 리소스를 생성 및 업데이트할 때 Oracle Cloud Infrastructure는 보안 영역 레시피의 정책에 대해 작업을 검증하고 정책을 위반하는 작업을 거부합니다.
- Cloud Guard
사용자정의 감지기 및 응답기 레시피를 생성하도록 Oracle에서 제공하는 기본 레시피를 복제 및 사용자정의합니다. 이러한 레시피를 통해 경고를 생성하는 보안 위반 유형과 경고에 대해 수행할 수 있는 작업을 지정할 수 있습니다. 예를 들어 가시성이 퍼블릭으로 설정된 오브젝트 스토리지 버킷을 감지할 수 있습니다.
테넌시 레벨에서 Cloud Guard를 적용하여 가장 광범위한 범위를 다루고 여러 구성을 유지 관리하는 데 따르는 관리 부담을 줄이십시오.
관리 목록 기능을 사용하여 감지기에 특정 구성을 적용할 수도 있습니다.
- 보안 영역
사용자정의 감지기 및 응답기 레시피를 생성하도록 Oracle에서 제공하는 기본 레시피를 복제 및 사용자정의합니다. 이러한 레시피를 통해 경고를 생성하는 보안 위반 유형과 경고에 대해 수행할 수 있는 작업을 지정할 수 있습니다. 예를 들어 가시성이 퍼블릭으로 설정된 오브젝트 스토리지 버킷을 감지할 수 있습니다.
테넌시 레벨에서 Cloud Guard를 적용하여 가장 광범위한 범위를 다루고 여러 구성을 유지 관리하는 데 따르는 관리 부담을 줄이십시오. 관리 목록 기능을 사용하여 감지기에 특정 구성을 적용할 수도 있습니다.
- NSG(네트워크 보안 그룹)
NSG를 사용하여 특정 VNIC에 적용되는 수신 및 송신 규칙 세트를 정의할 수 있습니다. NSG를 사용하면 애플리케이션의 보안 요구사항과 VCN의 서브넷 아키텍처를 분리할 수 있으므로 보안 목록이 아닌 NSG를 사용하는 것이 좋습니다.
NSG를 사용하여 특정 VNIC에 적용되는 수신 및 송신 규칙 세트를 정의할 수 있습니다. NSG를 사용하면 애플리케이션의 보안 요구사항과 VCN의 서브넷 아키텍처를 분리할 수 있으므로 보안 목록이 아닌 NSG를 사용하는 것이 좋습니다.
- 로드 밸런서 대역폭
로드 밸런서를 생성하는 동안 고정 대역폭을 제공하는 미리 정의된 구성을 선택하거나, 대역폭 범위를 설정하고 서비스가 트래픽 패턴에 따라 대역폭을 자동으로 확장하도록 하는 사용자 정의(유연한) 구성을 지정할 수 있습니다. 두 접근 방법 중 하나를 사용하면 로드 밸런서를 생성한 후 언제든지 구성을 변경할 수 있습니다.
배치
이 참조 아키텍처의 Terraform 코드는 Oracle Cloud Infrastructure Resource Manager에서 샘플 스택으로 사용할 수 있습니다. 이 샘플 Terraform 스택은 OCI Data Flow 애플리케이션 환경을 IAM 정책 및 OCI Object Storage 버킷(타사 스토리지가 아님)과 함께 배포합니다. 기본적으로 데모 Python Spark 애플리케이션도 배포됩니다. GitHub에서 코드를 다운로드하여 특정 요구 사항에 맞게 사용자 정의할 수도 있습니다.
- Oracle Cloud Infrastructure Resource Manager의 샘플 스택을 사용하여 배포합니다.
- GitHub에서 Terraform 코드를 사용하여 배포:
- GitHub로 이동합니다.
- 저장소를 복제하거나 로컬 컴퓨터에 다운로드합니다.
README
문서의 지침을 따릅니다.
GitHub에 제공된 Terraform 코드 외에도 아래 코드 조각은 Amazon Web Services S3에 연결하는 방법과 데이터를 쿼리하는 방법을 보여줍니다.
- S3에 접속하여 데이터를 질의하려면
hadoop-aws.jar
및aws-java-sdk.jar
패키지를 포함해야 합니다. 다음과 같이pom.xml
파일에서 이러한 패키지를 참조할 수 있습니다.<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-aws</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.7.4</version> </dependency>
- 다음과 유사한 코드를 사용하여 Amazon Web Services S3에 연결합니다. 액세스 키와 보안 키를 제공해야 합니다. 아래 코드 조각에서 이러한 값은 각각
ACCESS
및SECRET
변수로 표현됩니다.SparkSession spark = SparkSession.builder().master("local") .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") .config("spark.hadoop.fs.s3a.access.key", ACCESS) .config("spark.hadoop.fs.s3a.secret.key", SECRET) .config("fs.s3a.connection.ssl.enabled", "false") .getOrCreate();
- 다음과 유사한 코드를 사용하여 S3 위치 및 지정한 테이블 이름을 사용하여 데이터를 질의합니다.
Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>"); ds.createOrReplaceTempView("<Table Name>"); Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");