Repository for dip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
6.1 KiB

# 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=<ACCESS_KEY> \
--from-literal=secret-access-key=<SECRET_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)를 참조하세요.