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
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)를 참조하세요.
|
|
|