Add service account and role/rolebinding

This commit is contained in:
wbsong111
2026-04-23 16:23:37 +09:00
parent 502e7f8e2b
commit ed0542e36d
8 changed files with 105 additions and 12 deletions
+43 -8
View File
@@ -25,7 +25,10 @@ flink-cdc-job/
└── templates/ └── templates/
├── _helpers.tpl ├── _helpers.tpl
├── configmap.yaml # 이 Job 전용 pipeline.yaml (Release.Name 기반 네이밍) ├── configmap.yaml # 이 Job 전용 pipeline.yaml (Release.Name 기반 네이밍)
── job.yaml # Kubernetes Job ── 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 helm install cdc-job ./flink/helm/flink-cdc-job -n flink-test
``` ```
Release 이름이 Job ConfigMap 이름으로 사용됩니다. Release 이름이 Job, ConfigMap, ServiceAccount, Role 이름으로 사용됩니다.
- Job: `cdc-job` - Job: `cdc-job`
- ConfigMap: `cdc-job-config` - 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.tag` | `3.5.0-flink1.20-r1` | 이미지 태그 |
| `image.pullPolicy` | `Always` | 이미지 풀 정책 | | `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 연결 ### Session Cluster 연결
@@ -89,8 +113,10 @@ helm uninstall cdc-job -n flink-test
| `sessionCluster.restAddress` | `flink-cdc-session-rest` | Session Cluster REST 서비스명 | | `sessionCluster.restAddress` | `flink-cdc-session-rest` | Session Cluster REST 서비스명 |
| `sessionCluster.restPort` | `8081` | REST 포트 | | `sessionCluster.restPort` | `8081` | REST 포트 |
> `restAddress`는 FlinkDeployment 이름에 `-rest`를 붙인 값입니다. > `restAddress`는 `flink-cdc-session` chart의 FlinkDeployment 이름에 `-rest`를 붙인 값입니다.
> 예: FlinkDeployment `flink-cdc-session` → 서비스명 `flink-cdc-session-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 글로벌 설정 ### Flink CDC 글로벌 설정
@@ -128,7 +154,7 @@ helm uninstall cdc-job -n flink-test
| `sink.catalog.s3Endpoint` | `https://minio.example.org` | S3 호환 스토리지 엔드포인트 | | `sink.catalog.s3Endpoint` | `https://minio.example.org` | S3 호환 스토리지 엔드포인트 |
| `sink.catalog.s3PathStyleAccess` | `"true"` | Path-style 접근 여부 | | `sink.catalog.s3PathStyleAccess` | `"true"` | Path-style 접근 여부 |
| `sink.catalog.oauth2Uri` | `https://keycloak.example.org/...` | OAuth2 토큰 엔드포인트 | | `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 | | `sink.catalog.scope` | `lakekeeper` | OAuth2 scope |
### 라우팅 ### 라우팅
@@ -148,6 +174,9 @@ route:
### values-users.yaml (사용자/상품 테이블) ### values-users.yaml (사용자/상품 테이블)
```yaml ```yaml
sessionCluster:
restAddress: flink-cdc-session-session-rest
pipeline: pipeline:
name: cdc-users name: cdc-users
parallelism: 2 parallelism: 2
@@ -172,6 +201,9 @@ route:
### values-orders.yaml (주문 테이블) ### values-orders.yaml (주문 테이블)
```yaml ```yaml
sessionCluster:
restAddress: flink-cdc-session-session-rest
pipeline: pipeline:
name: cdc-orders name: cdc-orders
parallelism: 4 parallelism: 4
@@ -198,7 +230,7 @@ helm template cdc-job . -n flink-test
helm lint . helm lint .
# 여러 release 이름으로 ConfigMap/Job 이름이 분리되는지 확인 # 여러 release 이름으로 리소스 이름이 분리되는지 확인
helm template cdc-users . -n flink-test | grep "name:" helm template cdc-users . -n flink-test | grep "name:"
helm template cdc-orders . -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 로그 확인 # Job 로그 확인
kubectl logs -n flink-test job/cdc-job kubectl logs -n flink-test job/cdc-job
# Flink REST API로 Job 상태 확인
kubectl exec -n flink-test <jobmanager-pod> -- curl -s http://localhost:8081/jobs
``` ```
@@ -4,7 +4,7 @@
# 제출 대상 Session Cluster (flink-cdc-session chart의 FlinkDeployment 이름 + "-rest") # 제출 대상 Session Cluster (flink-cdc-session chart의 FlinkDeployment 이름 + "-rest")
sessionCluster: sessionCluster:
restAddress: flink-cdc-session-rest restAddress: flink-cdc-session-session-rest
restPort: 8081 restPort: 8081
# PostgreSQL 소스 연결 정보 # PostgreSQL 소스 연결 정보
@@ -12,6 +12,17 @@ Fully qualified name: Release.Name (chart name 중복 시 제거)
{{- .Release.Name | trunc 63 | trimSuffix "-" }} {{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- end }} {{- 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 Common labels
*/}} */}}
@@ -9,7 +9,7 @@ spec:
backoffLimit: 0 backoffLimit: 0
template: template:
spec: spec:
serviceAccountName: {{ .Values.serviceAccount }} serviceAccountName: {{ include "flink-cdc-job.serviceAccountName" . }}
containers: containers:
- name: submit - name: submit
image: {{ .Values.image.repository }}:{{ .Values.image.tag }} image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
@@ -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 }}
@@ -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 }}
@@ -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 }}
@@ -3,7 +3,12 @@ image:
tag: 3.5.0-flink1.20-r1 tag: 3.5.0-flink1.20-r1
pullPolicy: Always pullPolicy: Always
serviceAccount: flink serviceAccount:
create: true
name: "" # defaults to fullname (release name) when empty
rbac:
create: true
# 제출 대상 Session Cluster REST 엔드포인트 # 제출 대상 Session Cluster REST 엔드포인트
# flink-cdc-session chart가 생성한 서비스명: {FlinkDeployment.metadata.name}-rest # flink-cdc-session chart가 생성한 서비스명: {FlinkDeployment.metadata.name}-rest