diff --git a/manifests/helm/flink-cdc-job/0.1.0/README.md b/manifests/helm/flink-cdc-job/0.1.0/README.md index 30c7690..e1acce5 100644 --- a/manifests/helm/flink-cdc-job/0.1.0/README.md +++ b/manifests/helm/flink-cdc-job/0.1.0/README.md @@ -24,8 +24,11 @@ flink-cdc-job/ ├── values.yaml └── templates/ ├── _helpers.tpl - ├── configmap.yaml # 이 Job 전용 pipeline.yaml (Release.Name 기반 네이밍) - └── job.yaml # Kubernetes Job + ├── configmap.yaml # 이 Job 전용 pipeline.yaml (Release.Name 기반 네이밍) + ├── job.yaml # Kubernetes Job + ├── serviceaccount.yaml # ServiceAccount (serviceAccount.create: true 시 생성) + ├── role.yaml # Role (rbac.create: true 시 생성) + └── rolebinding.yaml # RoleBinding (rbac.create: true 시 생성) ``` ## 배포 @@ -36,9 +39,11 @@ flink-cdc-job/ helm install cdc-job ./flink/helm/flink-cdc-job -n flink-test ``` -Release 이름이 Job 및 ConfigMap 이름으로 사용됩니다. +Release 이름이 Job, ConfigMap, ServiceAccount, Role 이름으로 사용됩니다. - Job: `cdc-job` - ConfigMap: `cdc-job-config` +- ServiceAccount: `cdc-job` +- Role / RoleBinding: `cdc-job` ### 여러 파이프라인 동시 배포 @@ -77,10 +82,29 @@ helm uninstall cdc-job -n flink-test | 파라미터 | 기본값 | 설명 | |----------|--------|------| -| `image.repository` | `wbsong111/flink-cdc-pipeline` | 컨테이너 이미지 레지스트리/이름 | +| `image.repository` | `paasup/flink-cdc-pipeline` | 컨테이너 이미지 레지스트리/이름 | | `image.tag` | `3.5.0-flink1.20-r1` | 이미지 태그 | | `image.pullPolicy` | `Always` | 이미지 풀 정책 | -| `serviceAccount` | `flink` | Kubernetes ServiceAccount 이름 | + +### ServiceAccount + +| 파라미터 | 기본값 | 설명 | +|----------|--------|------| +| `serviceAccount.create` | `true` | ServiceAccount 생성 여부 | +| `serviceAccount.name` | `""` | SA 이름. 비어있으면 Release.Name 사용 | + +### RBAC + +| 파라미터 | 기본값 | 설명 | +|----------|--------|------| +| `rbac.create` | `true` | Role / RoleBinding 생성 여부 | + +`rbac.create: true` 시 생성되는 Role 권한: + +| 리소스 | 권한 | +|--------|------| +| `configmaps` | `get`, `list` | +| `pods` | `get`, `list` | ### Session Cluster 연결 @@ -89,8 +113,10 @@ helm uninstall cdc-job -n flink-test | `sessionCluster.restAddress` | `flink-cdc-session-rest` | Session Cluster REST 서비스명 | | `sessionCluster.restPort` | `8081` | REST 포트 | -> `restAddress`는 FlinkDeployment 이름에 `-rest`를 붙인 값입니다. -> 예: FlinkDeployment `flink-cdc-session` → 서비스명 `flink-cdc-session-rest` +> `restAddress`는 `flink-cdc-session` chart의 FlinkDeployment 이름에 `-rest`를 붙인 값입니다. +> `flink-cdc-session` chart는 FlinkDeployment를 `{release-name}-session`으로 생성하므로 +> REST 서비스명은 `{release-name}-session-rest`가 됩니다. +> 예: release name `flink-cdc-session` → `sessionCluster.restAddress: flink-cdc-session-session-rest` ### Flink CDC 글로벌 설정 @@ -128,7 +154,7 @@ helm uninstall cdc-job -n flink-test | `sink.catalog.s3Endpoint` | `https://minio.example.org` | S3 호환 스토리지 엔드포인트 | | `sink.catalog.s3PathStyleAccess` | `"true"` | Path-style 접근 여부 | | `sink.catalog.oauth2Uri` | `https://keycloak.example.org/...` | OAuth2 토큰 엔드포인트 | -| `sink.catalog.credential` | `lakekeeper-admin:...` | OAuth2 client_id:client_secret | +| `sink.catalog.credential` | `lakekeeper-admin:...` | OAuth2 `client_id:client_secret` | | `sink.catalog.scope` | `lakekeeper` | OAuth2 scope | ### 라우팅 @@ -148,6 +174,9 @@ route: ### values-users.yaml (사용자/상품 테이블) ```yaml +sessionCluster: + restAddress: flink-cdc-session-session-rest + pipeline: name: cdc-users parallelism: 2 @@ -172,6 +201,9 @@ route: ### values-orders.yaml (주문 테이블) ```yaml +sessionCluster: + restAddress: flink-cdc-session-session-rest + pipeline: name: cdc-orders parallelism: 4 @@ -198,7 +230,7 @@ helm template cdc-job . -n flink-test helm lint . -# 여러 release 이름으로 ConfigMap/Job 이름이 분리되는지 확인 +# 여러 release 이름으로 리소스 이름이 분리되는지 확인 helm template cdc-users . -n flink-test | grep "name:" helm template cdc-orders . -n flink-test | grep "name:" ``` @@ -211,4 +243,7 @@ kubectl get job -n flink-test # Job 로그 확인 kubectl logs -n flink-test job/cdc-job + +# Flink REST API로 Job 상태 확인 +kubectl exec -n flink-test -- curl -s http://localhost:8081/jobs ``` diff --git a/manifests/helm/flink-cdc-job/0.1.0/custom-values.yaml b/manifests/helm/flink-cdc-job/0.1.0/custom-values.yaml index 32cb6a2..42b7fba 100644 --- a/manifests/helm/flink-cdc-job/0.1.0/custom-values.yaml +++ b/manifests/helm/flink-cdc-job/0.1.0/custom-values.yaml @@ -4,7 +4,7 @@ # 제출 대상 Session Cluster (flink-cdc-session chart의 FlinkDeployment 이름 + "-rest") sessionCluster: - restAddress: flink-cdc-session-rest + restAddress: flink-cdc-session-session-rest restPort: 8081 # PostgreSQL 소스 연결 정보 diff --git a/manifests/helm/flink-cdc-job/0.1.0/templates/_helpers.tpl b/manifests/helm/flink-cdc-job/0.1.0/templates/_helpers.tpl index 5fc0033..f5e6e0f 100644 --- a/manifests/helm/flink-cdc-job/0.1.0/templates/_helpers.tpl +++ b/manifests/helm/flink-cdc-job/0.1.0/templates/_helpers.tpl @@ -12,6 +12,17 @@ Fully qualified name: Release.Name (chart name 중복 시 제거) {{- .Release.Name | trunc 63 | trimSuffix "-" }} {{- end }} +{{/* +ServiceAccount name +*/}} +{{- define "flink-cdc-job.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "flink-cdc-job.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + {{/* Common labels */}} diff --git a/manifests/helm/flink-cdc-job/0.1.0/templates/job.yaml b/manifests/helm/flink-cdc-job/0.1.0/templates/job.yaml index 1bfb0be..b383665 100644 --- a/manifests/helm/flink-cdc-job/0.1.0/templates/job.yaml +++ b/manifests/helm/flink-cdc-job/0.1.0/templates/job.yaml @@ -9,7 +9,7 @@ spec: backoffLimit: 0 template: spec: - serviceAccountName: {{ .Values.serviceAccount }} + serviceAccountName: {{ include "flink-cdc-job.serviceAccountName" . }} containers: - name: submit image: {{ .Values.image.repository }}:{{ .Values.image.tag }} diff --git a/manifests/helm/flink-cdc-job/0.1.0/templates/role.yaml b/manifests/helm/flink-cdc-job/0.1.0/templates/role.yaml new file mode 100644 index 0000000..7e34e34 --- /dev/null +++ b/manifests/helm/flink-cdc-job/0.1.0/templates/role.yaml @@ -0,0 +1,16 @@ +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ include "flink-cdc-job.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "flink-cdc-job.labels" . | nindent 4 }} +rules: + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list"] +{{- end }} diff --git a/manifests/helm/flink-cdc-job/0.1.0/templates/rolebinding.yaml b/manifests/helm/flink-cdc-job/0.1.0/templates/rolebinding.yaml new file mode 100644 index 0000000..f8e9ef0 --- /dev/null +++ b/manifests/helm/flink-cdc-job/0.1.0/templates/rolebinding.yaml @@ -0,0 +1,17 @@ +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ include "flink-cdc-job.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "flink-cdc-job.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ include "flink-cdc-job.fullname" . }} +subjects: + - kind: ServiceAccount + name: {{ include "flink-cdc-job.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end }} diff --git a/manifests/helm/flink-cdc-job/0.1.0/templates/serviceaccount.yaml b/manifests/helm/flink-cdc-job/0.1.0/templates/serviceaccount.yaml new file mode 100644 index 0000000..4a1eddc --- /dev/null +++ b/manifests/helm/flink-cdc-job/0.1.0/templates/serviceaccount.yaml @@ -0,0 +1,9 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "flink-cdc-job.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "flink-cdc-job.labels" . | nindent 4 }} +{{- end }} diff --git a/manifests/helm/flink-cdc-job/0.1.0/values.yaml b/manifests/helm/flink-cdc-job/0.1.0/values.yaml index f396c39..10c4e00 100644 --- a/manifests/helm/flink-cdc-job/0.1.0/values.yaml +++ b/manifests/helm/flink-cdc-job/0.1.0/values.yaml @@ -3,7 +3,12 @@ image: tag: 3.5.0-flink1.20-r1 pullPolicy: Always -serviceAccount: flink +serviceAccount: + create: true + name: "" # defaults to fullname (release name) when empty + +rbac: + create: true # 제출 대상 Session Cluster REST 엔드포인트 # flink-cdc-session chart가 생성한 서비스명: {FlinkDeployment.metadata.name}-rest