# Flink CDC Session 배포 ## 1. 배포 방법 ```sh helm upgrade --install flink-cdc-session ./ \ --namespace flink-test \ --create-namespace \ -f values.yaml \ -f custom-values.yaml ``` ### Session Cluster 먼저 배포 후 Job 활성화 (권장) ```sh # 1단계: Session Cluster만 배포 (custom-values.yaml에 job.enabled: false 설정) helm upgrade --install flink-cdc-session ./ \ --namespace flink-test \ --create-namespace \ -f values.yaml \ -f custom-values.yaml # 2단계: Cluster RUNNING 확인 kubectl get flinkdeployment -n flink-test -w # 3단계: Job 포함해서 upgrade helm upgrade flink-cdc-session ./ \ --namespace flink-test \ -f values.yaml \ -f custom-values.yaml \ --set job.enabled=true ``` ## 2. custom-values.yaml 설명 ### 1) ServiceAccount / RBAC | Name | 설명 | 기본값 | |------|------|--------| | `serviceAccount.create` | ServiceAccount 생성 여부 | `true` | | `serviceAccount.name` | SA 이름. 비어있으면 Release.Name 사용 | `""` | | `rbac.create` | Role / RoleBinding 생성 여부 | `true` | > `rbac.create: true` 시 JobManager가 TaskManager(Deployment)를 관리하기 위한 RBAC 권한이 함께 생성됩니다. ### 2) 체크포인트 저장소 | Name | 설명 | 기본값 | |------|------|--------| | `checkpointStorage.storageType` | 저장소 유형 (`s3` \| `gcs`) | `s3` | | `checkpointStorage.checkpointDir` | 체크포인트 저장 경로 | `s3://flink/checkpoints` | | `checkpointStorage.savepointDir` | 세이브포인트 저장 경로 | `s3://flink/savepoints` | | `checkpointStorage.s3.endpoint` | S3/MinIO 엔드포인트 | `http://minio.minio.svc.cluster.local:9000` | | `checkpointStorage.s3.pathStyleAccess` | Path-style 접근 여부 (MinIO는 `"true"`) | `"true"` | | `checkpointStorage.s3.existingSecret` | 자격증명 Secret 이름 | `minio-credentials` | ### 3) Ingress 설정 | Name | 설명 | 기본값 | |------|------|--------| | `ingress.enabled` | Ingress 활성화 여부 | `true` | | `ingress.host` | Flink Web UI 호스트명 | `flink-cdc-session.example.org` | | `ingress.className` | IngressClass 이름 | `kong` | | `ingress.annotations` | Ingress 어노테이션 | cert-manager + Kong HTTPS 설정 | ### 4) Truststore (사설 CA 환경) | Name | 설명 | 기본값 | | --- | --- | --- | | `truststore.enabled` | 외부 JKS 사용 여부 | `true` | | `truststore.secretName` | 기존 Secret 이름 지정. 비어있으면 `{release-name}-flink-truststore` 자동 사용 | `""` | > `truststore.secretName: flink-truststore` 처럼 기존 Secret을 지정하면 chart가 Secret을 새로 생성하지 않고 재사용합니다. ### 5) Job 설정 | Name | 설명 | 기본값 | |------|------|--------| | `job.enabled` | CDC Job 활성화 여부 | `false` | > **주의**: Session Cluster가 RUNNING 상태가 된 후 `job.enabled: true`로 upgrade하세요. ### 6) Flink 클러스터 리소스 (values.yaml에서 조정) | Name | 설명 | 기본값 | |------|------|--------| | `jobManager.memory` | JobManager 메모리 | `1024m` | | `jobManager.cpu` | JobManager CPU | `0.5` | | `taskManager.replicas` | TaskManager 인스턴스 수 | `3` | | `taskManager.memory` | TaskManager 메모리 | `2048m` | | `taskManager.cpu` | TaskManager CPU | `1` | | `taskManager.taskSlots` | TaskManager 슬롯 수 | `2` | ### 7) PostgreSQL 소스 (values.yaml에서 조정) | Name | 설명 | 기본값 | |------|------|--------| | `postgres.hostname` | PostgreSQL 호스트 | `postgres-postgresql.flink-test.svc.cluster.local` | | `postgres.port` | PostgreSQL 포트 | `5432` | | `postgres.username` | CDC 전용 사용자 | `flink_cdc` | | `postgres.password` | 사용자 패스워드 | `password` | | `postgres.slotName` | Replication slot 이름 | `flink_cdc_slot` | | `postgres.tables` | CDC 대상 테이블 목록 | `testdb.public.orders,testdb.public.users` | ### 8) Iceberg 싱크 (values.yaml에서 조정) | Name | 설명 | 기본값 | |------|------|--------| | `sink.catalog.uri` | Lakekeeper REST URI | `https://lakekeeper.example.org/catalog` | | `sink.catalog.warehouse` | 카탈로그 warehouse 이름 | `minio` | | `sink.catalog.s3Endpoint` | Iceberg 데이터 저장소 엔드포인트 | `https://minio.example.org` | | `sink.catalog.oauth2Uri` | Keycloak OAuth2 토큰 URI | `https://keycloak.example.org/…` | | `sink.catalog.credential` | `client_id:client_secret` | - | | `sink.catalog.scope` | OAuth2 scope | `lakekeeper` | ## 3. 사전 준비: Secret 생성 ### 3.1 MinIO 자격증명 Secret ```bash kubectl create secret generic minio-credentials \ --from-literal=access-key-id= \ --from-literal=secret-access-key= \ -n flink-test ``` ### 3.2 Truststore Secret (`truststore.enabled: true` 인 경우) ```bash # JVM 기본 cacerts를 베이스로 truststore 생성 IMAGE="paasup/flink-cdc-pipeline:3.5.0-flink1.20-r1" docker run --rm --entrypoint="" "${IMAGE}" \ cat /opt/java/openjdk/lib/security/cacerts > truststore.jks # 사설 CA 추가 (cert-manager 사용 시) kubectl get secret root-ca-secret -n cert-manager \ -o jsonpath='{.data.ca\.crt}' | base64 -d > /tmp/internal-ca.pem keytool -import -noprompt \ -keystore truststore.jks \ -storepass changeit \ -alias internal-root-ca \ -file /tmp/internal-ca.pem # Kubernetes Secret 생성 kubectl create secret generic flink-truststore \ --from-file=truststore.jks=./truststore.jks \ -n flink-test ``` > 공인 CA 환경(Let's Encrypt 등)에서는 `truststore.enabled: false`로 설정하면 truststore Secret 불필요합니다. ## 4. 배포 후 확인 ```bash # Session Cluster 상태 확인 kubectl get flinkdeployment -n flink-test # Pod 상태 확인 kubectl get pods -n flink-test # Job 로그 확인 (release name: flink-cdc-session, job.name: submit-cdc) kubectl logs -n flink-test job/flink-cdc-session-submit-cdc # Flink Web UI (포트포워딩) kubectl port-forward svc/flink-cdc-session-session-rest 8081:8081 -n flink-test ``` ## 5. 삭제 ```bash helm uninstall flink-cdc-session -n flink-test ``` ## 6. 참고 자세한 파라미터 설명, truststore 생성 방법, 렌더링 확인 방법은 [README.md](README.md)를 참조하세요.