# OpenMetadata Dependencies 배포

## 1. 배포 방법

### 1) 배포 시 주의 사항

- openmetadata-dependencies는 MySQL, OpenSearch, Airflow를 포함하는 의존성 차트이다.
- `openmetadata` 차트보다 먼저 배포되어야 한다.
- Airflow DAG 저장 및 로그 볼륨에 `ReadWriteMany`를 지원하는 StorageClass가 필요하다.
- MySQL initdbScripts에 정의된 패스워드는 `openmetadata` 차트의 database 연결 설정과 일치해야 한다.

### 2) 배포 방법

``` sh
git clone https://github.com/paasup/dip-catalog.git
cd manifests/helm/openmetadata-dependencies/1.12.1
helm upgrade openmetadata-dependencies ./ -f custom-values.yaml --install -n openmetadata --create-namespace
```

---

## 2. custom-values.yaml 설명

### 1) MySQL 설정

- OpenMetadata(`openmetadata_db`)와 Airflow(`airflow_db`) 데이터베이스를 초기화 스크립트로 함께 생성한다.

| Name | 설명 | 기본값 |
| ---- | ---- | ------ |
| `mysql.primary.resources` | MySQL Pod의 자원 설정 | `requests: 500m/512Mi, limits: 750m/768Mi` |
| `mysql.primary.persistence.size` | MySQL 데이터 볼륨 크기 | `50Gi` |

- DB 계정 패스워드 변경 시 `initdbScripts` 수정
  ``` yaml
  mysql:
    initdbScripts:
      init_openmetadata_db_scripts.sql: |
        CREATE DATABASE openmetadata_db;
        CREATE USER 'openmetadata_user'@'%' IDENTIFIED BY 'openmetadata_password';  # 패스워드 변경
        GRANT ALL PRIVILEGES ON openmetadata_db.* TO 'openmetadata_user'@'%' WITH GRANT OPTION;
        commit;
      init_airflow_db_scripts.sql: |
        CREATE DATABASE airflow_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
        CREATE USER 'airflow_user'@'%' IDENTIFIED BY 'airflow_pass';  # 패스워드 변경
        GRANT ALL PRIVILEGES ON airflow_db.* TO 'airflow_user'@'%' WITH GRANT OPTION;
        commit;
  ```

> **주의**: `initdbScripts`는 MySQL 최초 초기화 시에만 실행된다. 패스워드를 변경하려면 PVC를 삭제하고 재배포하거나 MySQL에 직접 접속하여 변경해야 한다.

- MySQL 리소스 Preset 참고

  | Preset | requests cpu | requests memory | limits cpu | limits memory |
  | ------ | ------------ | --------------- | ---------- | ------------- |
  | small  | 500m | 512Mi | 750m | 768Mi |
  | medium | 500m | 1024Mi | 750m | 1536Mi |
  | large  | 1.0  | 2048Mi | 1.5  | 3072Mi |

### 2) OpenSearch 설정

| Name | 설명 | 기본값 |
| ---- | ---- | ------ |
| `opensearch.opensearchJavaOpts` | OpenSearch JVM 힙 메모리 설정 | `"-Xmx1g -Xms1g"` |
| `opensearch.persistence.size` | OpenSearch 데이터 볼륨 크기 | `30Gi` |
| `opensearch.resources` | OpenSearch Pod의 자원 설정 | `requests: 100m/256M, limits: 2000m/2048M` |

- OpenSearch JVM 힙은 `resources.limits.memory`의 절반 이하로 설정을 권장한다.

  ``` yaml
  opensearch:
    opensearchJavaOpts: "-Xmx1g -Xms1g"
    resources:
      requests:
        cpu: "100m"
        memory: "256M"
      limits:
        cpu: "2000m"
        memory: "2048M"
  ```

### 3) Airflow 설정

- OpenMetadata 전용 Airflow ingestion 이미지(`docker.getcollate.io/openmetadata/ingestion`)를 사용한다.

#### 3.1) 리소스 설정

- 기본값은 `{}`(무제한)으로 설정되어 있으며, 운영 환경에서는 적절한 리소스 제한을 설정한다.

  ``` yaml
  airflow:
    workers:
      replicas: 2
      resources:
        requests:
          cpu: "500m"
          memory: "1Gi"
        limits:
          cpu: "1000m"
          memory: "2Gi"
    scheduler:
      resources: {}
    webserver:
      resources: {}
    apiServer:
      resources: {}
    triggerer:
      resources: {}
  ```

#### 3.2) 볼륨 설정

- DAG 저장 공간과 로그 저장 공간에 `ReadWriteMany` StorageClass가 필요하다.

  ``` yaml
  airflow:
    dags:
      persistence:
        enabled: true
        storageClassName: ""   # ReadWriteMany를 지원하는 StorageClass 이름으로 변경
        accessMode: ReadWriteMany
        size: 1Gi
    logs:
      persistence:
        enabled: true
        storageClassName: ""   # ReadWriteMany를 지원하는 StorageClass 이름으로 변경
        size: 1Gi
  ```
