Cloud Composer 환경 아키텍처

Cloud Composer 1 | Cloud Composer 2

이 페이지에서는 Cloud Composer 2 환경의 아키텍처를 설명합니다.

환경 아키텍처 구성

Cloud Composer 2 환경에서 가능한 아키텍처 구성은 다음과 같습니다.

각 구성은 환경 리소스의 아키텍처를 약간 변경합니다.

고객 및 테넌트 프로젝트

환경을 만들면 Cloud Composer가 테넌트와 고객 프로젝트 간에 환경 리소스를 분산시킵니다.

고객 프로젝트는 환경을 만드는 Google Cloud 프로젝트입니다. 단일 고객 프로젝트에서 2개 이상의 환경을 만들 수 있습니다.

테넌트 프로젝트는 Google이 관리하는 테넌트 프로젝트입니다. 테넌트 프로젝트는 환경에 통합 액세스 제어 및 추가 데이터 보안 레이어를 제공합니다. 각 Cloud Composer 환경에는 자체 테넌트 프로젝트가 있습니다.

환경 구성요소

Cloud Composer 환경은 환경 구성요소로 구성됩니다.

환경 구성요소는 환경의 일부로 Google Cloud에서 실행되는 관리형 Airflow 인프라의 요소입니다.

환경 구성요소는 환경의 테넌트 또는 고객 프로젝트에서 실행됩니다.

환경의 일부 구성요소는 독립형 Google Cloud 제품을 기반으로 합니다. 이러한 제품에 대한 할당량 및 한도는 사용자 환경에도 적용됩니다. 예를 들어 Cloud Composer 환경은 VPC 피어링을 사용합니다. 최대 VPC 피어링 수에 대한 할당량이 고객 프로젝트에 적용되므로 프로젝트가 이 최대 피어링 수에 도달하면 추가 환경을 만들 수 없습니다.

환경 클러스터

환경 클러스터는 환경의 Autopilot 모드 VPC 기반 Google Kubernetes Engine 클러스터입니다.

  • 환경 노드는 환경 클러스터의 VM입니다.

  • 환경 클러스터의 포드는 Airflow 작업자 및 스케줄러와 같은 다른 환경 구성요소와 함께 컨테이너를 실행합니다. 포드는 환경 노드에서 실행됩니다.

  • 환경 클러스터의 워크로드 리소스는 환경 클러스터에 있는 포드 집합을 관리합니다. 환경의 많은 구성요소는 다양한 유형의 워크로드 리소스로 구현됩니다. 예를 들어 Airflow 작업자는 배포로 실행됩니다. 환경에는 배포 외에도 StatefulSet, DaemonSet 및 작업 워크로드 유형이 있습니다.

기본적으로 Cloud Composer는 보안 취약점으로로부터 환경 클러스터를 보호하기 위해 노드 자동 업그레이드노드 자동 복구를 사용 설정합니다. 이러한 작업은 환경에 대해 지정한 유지보수 기간에 수행됩니다.

Airflow 스케줄러, 작업자 및 Redis 큐

Airflow 스케줄러는 DAG 실행 및 DAG의 개별 태스크 일정을 제어합니다. 스케줄러는 환경 클러스터에서 애플리케이션으로 실행되는 Redis 큐를 사용하여 Airflow 작업자에게 태스크를 배포합니다. Airflow 스케줄러는 환경 클러스터에서 배포로 실행됩니다.

Airflow 작업자는 DAG의 개별 태스크를 Redis 큐에서 가져와서 실행합니다. Airflow 작업자는 환경 클러스터에서 배포로 실행됩니다.

Redis 큐는 DAG의 개별 태스크 큐를 보존합니다. Airflow 스케줄러가 큐를 채우면 Airflow 작업자가 해당 태스크를 가져옵니다. Redis 큐는 환경 클러스터에서 StatefulSet 애플리케이션으로 실행되므로 컨테이너를 다시 시작해도 메시지가 유지됩니다.

Airflow 웹 서버

Airflow 웹 서버는 환경의 Airflow UI를 실행합니다.

Cloud Composer 2에서 Airflow 웹 서버는 사용자 환경의 클러스터에서 배포로 실행됩니다.

IAP(Identity-Aware Proxy)는 Cloud Composer 2에서 액세스에 사용되지 않습니다.

Airflow 데이터베이스

Airflow 데이터베이스는 환경의 테넌트 프로젝트에서 실행되는 Cloud SQL 인스턴스입니다. Airflow 메타데이터 데이터베이스를 호스팅합니다.

Cloud Composer는 환경의 서비스 계정에만 데이터베이스 액세스를 허용하여 민감한 연결 및 워크플로 정보를 보호합니다.

환경 버킷

환경 버킷은 DAG, 플러그인, 데이터 종속 항목 및 Airflow 로그를 저장하는 Cloud Storage 버킷입니다. 환경 버킷은 고객 프로젝트에 있습니다.

환경 버킷의 /dags 폴더에 DAG 파일을 업로드하면 Cloud Composer가 해당 환경의 작업자, 스케줄러, 웹 서버에 DAG를 동기화합니다. 크기 제한에 대한 염려 없이 data/ 폴더와 logs/ 폴더에 워크플로 아티팩트를 저장하고 데이터 액세스를 완벽하게 제어할 수 있습니다.

기타 환경 구성요소

Cloud Composer 환경에는 다음과 같은 몇 가지 추가 환경 구성요소가 있습니다.

  • Cloud SQL 스토리지 Airflow 데이터베이스 백업을 저장합니다. Cloud Composer는 데이터 손실 가능성을 최소화하기 위해 Airflow 메타데이터를 매일 백업합니다.

    Cloud SQL 스토리지는 환경의 테넌트 프로젝트에서 실행됩니다. Cloud SQL 스토리지의 내용에는 액세스할 수 없습니다.

  • Cloud SQL 프록시. 환경의 다른 구성요소를 Airflow 데이터베이스에 연결합니다.

    환경에는 환경 아키텍처에 따라 다른 역할을 수행하는 Cloud SQL 프록시 인스턴스가 하나 이상 있을 수 있습니다.

    Cloud SQL 프록시는 환경 클러스터 또는 테넌트 프로젝트의 App Engine Flex 인스턴스에서 배포로 실행됩니다.

    또한 환경 클러스터에 배포될 때 Cloud SQL 프록시는 애플리케이션, 클라이언트 또는 기타 Google Cloud 서비스에서 Cloud SQL 인스턴스에 대한 액세스를 승인합니다.

  • HAProxy. 테넌트 프로젝트에서 실행되는 2개의 Cloud SQL 프록시 인스턴스 간에 트래픽을 Cloud SQL 인스턴스로 분산합니다. 이 구성요소는 비공개 IP 환경 아키텍처에서 사용되며, Cloud SQL 프록시 배포에서 컨테이너로 실행됩니다.

  • Airflow 모니터링. Cloud Monitoring에 환경 측정항목을 보고하고 airflow_monitoring DAG를 트리거합니다. airflow_monitoring DAG는 예를 들어, 나중에 환경 모니터링 대시보드에서 소송이 제기되는 환경 상태 데이터를 보고합니다. Airflow 모니터링은 환경 클러스터에서 배포로 실행됩니다.

  • Composer 에이전트는 환경 만들기, 업데이트, 업그레이드, 삭제와 같은 환경 작업을 수행합니다. 일반적으로 이 구성요소는 환경을 변경하는 데 사용됩니다. 환경의 클러스터에서 작업으로 실행됩니다.

  • Airflow InitDB는 Cloud SQL 인스턴스 및 최초 데이터베이스 스키마를 만듭니다. Airflow InitDB는 환경 클러스터에서 작업으로 실행됩니다.

  • FluentD. 모든 환경 구성요소에서 로그를 수집하고 해당 로그를 Cloud Logging에 업로드합니다. 환경의 클러스터에서 DaemonSet로 실행됩니다.

  • Pub/Sub 구독. 환경은 Pub/Sub 구독을 통해 GKE 서비스 에이전트와 통신합니다. Pub/Sub의 기본 동작을 사용하여 메시지를 관리합니다. .*-composer-.* Pub/Sub 주제를 삭제하지 마세요. Pub/Sub는 프로젝트당 주제를 최대 10,000개까지 지원합니다.

  • 고객 측정항목 Stackdriver 어댑터는 자동 확장을 위해 환경 측정항목을 보고합니다. 이 구성요소는 환경 클러스터에서 배포로 실행됩니다.

  • Airflow 작업자 세트 컨트롤러는 고객 측정항목 Stackdriver 어댑터의 측정항목을 기반으로 환경을 자동으로 확장합니다. 이 구성요소는 환경 클러스터에서 배포로 실행됩니다.

  • Cloud Storage FUSE. Airflow 작업자, 스케줄러, 웹 서버가 버킷의 데이터에 액세스할 수 있도록 이러한 구성요소에 환경 버킷을 파일 시스템으로 마운트합니다. 환경의 클러스터에서 DaemonSet로 실행됩니다.

공개 IP 환경 아키텍처

테넌트 프로젝트 및 고객 프로젝트의 공개 IP Cloud Composer 환경 리소스
그림 1. 공개 IP 환경 아키텍처(확대하려면 클릭)

Cloud Composer 2의 공개 IP 환경 아키텍처:

  • 테넌트 프로젝트는 Cloud SQL 인스턴스와 Cloud SQL 스토리지를 호스팅합니다.
  • 고객 프로젝트는 환경의 다른 모든 구성요소를 호스팅합니다.
  • 고객 프로젝트의 Airflow 스케줄러 및 작업자는 고객 프로젝트에 있는 Cloud SQL 프록시 인스턴스를 통해 Airflow 데이터베이스와 통신합니다.

비공개 IP

테넌트 프로젝트 및 고객 프로젝트의 비공개 IP Cloud Composer 환경 리소스
그림 2. 비공개 IP 환경 아키텍처(확대하려면 클릭)

Cloud Composer 2의 비공개 IP 환경 아키텍처에서 다음 안내를 따르세요.

  • 테넌트 프로젝트는 Cloud SQL 인스턴스와 Cloud SQL 스토리지를 호스팅합니다.
  • 고객 프로젝트는 환경의 다른 모든 구성요소를 호스팅합니다.
  • Airflow 스케줄러와 작업자는 환경 클러스터의 HAProxy 프로세스를 통해 Airflow 데이터베이스에 연결합니다.
  • HAProxy 프로세스는 테넌트 프로젝트에 있는 두 Cloud SQL 프록시 인스턴스 간의 Cloud SQL 인스턴스에 트래픽을 부하 분산합니다. 고객 프로젝트가 네트워크 제한으로 인해 데이터베이스에 직접 액세스하지 않으므로 비공개 IP 환경은 2개의 Cloud SQL 프록시 인스턴스를 사용합니다. 환경 구성요소가 데이터베이스에 항상 액세스할 수 있도록 하려면 두 개의 인스턴스가 필요합니다.

Cloud Logging 및 Cloud Monitoring과의 통합

Cloud Composer는 Cloud Logging 및 Google Cloud 프로젝트의 Cloud Monitoring과 통합되어 있으므로 Airflow 서비스 및 워크플로 로그를 중앙에서 볼 수 있습니다.

Cloud Monitoring은 Cloud Composer에서 측정항목, 이벤트, 메타데이터를 수집하여 대시보드와 차트를 통해 통계를 생성합니다.

Cloud Logging의 스트리밍 특성으로 인해 환경의 Cloud Storage 버킷에 Airflow 로그가 나타날 때까지 기다리는 대신 Airflow 스케줄러와 작업자가 내보낸 로그를 즉시 볼 수 있습니다. Cloud Composer의 Cloud Logging 로그는 google-fluentd를 기반으로 하므로 Airflow 스케줄러와 작업자가 생성하는 모든 로그에 액세스할 수 있습니다.

Google Cloud 프로젝트의 로그 수를 제한하려면 모든 로그 수집을 중지하면 됩니다. Logging을 중지하지 마세요.

다음 단계