diff --git a/doc/define-chart-resources.md b/doc/define-chart-resources.md index 7658d27..ab5244d 100644 --- a/doc/define-chart-resources.md +++ b/doc/define-chart-resources.md @@ -2224,4 +2224,42 @@ openfga: size: 8Gi ``` +--- + +## 38. flink-kubernetes-operator +**Apache Flink Kubernetes Operator - Kubernetes에서 Flink 애플리케이션 관리** + +| 컴포넌트 | Small | Medium | Large | +|----------|-------|--------|-------| +| **Operator Pod** | 100m/256Mi → 200m/512Mi | 200m/512Mi → 500m/1Gi | 500m/1Gi → 1000m/2Gi | +| **Webhook Container** | 50m/128Mi → 100m/256Mi | 100m/256Mi → 200m/512Mi | 200m/512Mi → 500m/1Gi | + +**권장 사용 시나리오:** +- Small: 개발/테스트 환경 (< 5개 FlinkDeployment) +- Medium: 스테이징/소규모 프로덕션 (5-20개 FlinkDeployment) +- Large: 대규모 프로덕션 환경 (20+ FlinkDeployment) + +**custom-values.yaml 설정** +```yaml +# Operator Pod 리소스 설정 +operatorPod: + resources: + limits: + cpu: "200m" + memory: "512Mi" + requests: + cpu: "100m" + memory: "256Mi" + + # Webhook Container 리소스 설정 + webhook: + resources: + limits: + cpu: "100m" + memory: "256Mi" + requests: + cpu: "50m" + memory: "128Mi" +``` + --- \ No newline at end of file diff --git a/manifests/helm/flink-kubernetes-operator/1.13.0/custom-values.yaml b/manifests/helm/flink-kubernetes-operator/1.13.0/custom-values.yaml new file mode 100644 index 0000000..9b47306 --- /dev/null +++ b/manifests/helm/flink-kubernetes-operator/1.13.0/custom-values.yaml @@ -0,0 +1,83 @@ +watchNamespaces: [] + + +image: + repository: ghcr.io/apache/flink-kubernetes-operator + pullPolicy: IfNotPresent + tag: "b40c553" + # If image digest is set then it takes precedence and the image tag will be ignored + digest: "" + +imagePullSecrets: [] + +# Replicas must be 1 unless operator leader election is configured +replicas: 1 + +# Strategy type must be Recreate unless leader election is configured +strategy: + type: Recreate + +operatorPod: + nodeSelector: {} + affinity: {} + tolerations: [] + topologySpreadConstraints: [] + + resources: + limits: + cpu: "200m" + memory: "512Mi" + requests: + cpu: "100m" + memory: "256Mi" + webhook: + resources: + limits: + cpu: "100m" + memory: "256Mi" + requests: + cpu: "50m" + memory: "128Mi" + + +defaultConfiguration: + # If set to true, creates ConfigMaps/VolumeMounts. If set to false, no configuration will be created. + # All below fields will be ignored if create is set to false. + create: true + # If set to true, + # (1) loads the built-in default configuration + # (2) appends the below flink-conf and logging configuration overrides + # If set to false, loads just the overrides as in (2). + # This option has not effect, if create is equal to false. + append: true + flink-conf.yaml: |+ + # Flink Config Overrides + kubernetes.operator.metrics.reporter.slf4j.factory.class: org.apache.flink.metrics.slf4j.Slf4jReporterFactory + kubernetes.operator.metrics.reporter.slf4j.interval: 5 MINUTE + + kubernetes.operator.reconcile.interval: 15 s + kubernetes.operator.observer.progress-check.interval: 5 s + log4j-operator.properties: |+ + # Flink Operator Logging Overrides + # rootLogger.level = DEBUG + # logger.operator.name= org.apache.flink.kubernetes.operator + # logger.operator.level = DEBUG + log4j-console.properties: |+ + # Flink Deployment Logging Overrides + # rootLogger.level = DEBUG + + +# Set the jvm start up options for webhook and operator +jvmArgs: + webhook: "" + operator: "" + logConfig: "-Dlog4j.configurationFile=/opt/flink/conf/log4j-operator.properties" + + +# Configuration for tls +tls: + create: false + secretName: flink-operator-cert + secretKeyRef: + name: operator-certificate-password + key: password diff --git a/manifests/helm/flink-kubernetes-operator/BUILD-README.md b/manifests/helm/flink-kubernetes-operator/BUILD-README.md new file mode 100644 index 0000000..9b734a8 --- /dev/null +++ b/manifests/helm/flink-kubernetes-operator/BUILD-README.md @@ -0,0 +1,77 @@ +# flink-kubernetes-operator 버전 갱신 가이드 +Flink Kubernetes Operator Helm Chart의 버전을 갱신할 경우 작업의 시작은 항상 main에서 이루어져야 한다. + +## 1. git 작업 환경 구성 +- 서비스 카탈로그 git 다운로드 +``` +$ git clone https://github.com/paasup/dip-catalog.git +``` + +- 작업 브랜치로 체크아웃 +``` +$ git checkout -b update-flink-kubernetes-operator/1.13.0 +``` + +## 2. helm chart 업데이트 +- BUILD-README.md, CUSTOM-README.md, custom-values.yaml을 제외한 파일 삭제 + ``` sh + # chart 디렉토리로 이동 + cd ~/dip-catalog/manifests/helm/flink-kubernetes-operator + + # 파일 삭제 전 삭제할 파일 목록 확인 + find . -mindepth 1 \( -name "CUSTOM-README.md" -o -name "BUILD-README.md" -o -name "custom-values.yaml" \) -prune -o -print + + # 파일 삭제 + find . -mindepth 1 \( -name "CUSTOM-README.md" -o -name "BUILD-README.md" -o -name "custom-values.yaml" \) -prune -o -exec rm -rf {} + + ``` + +- flink-kubernetes-operator 차트 다운로드 + ``` sh + # manifests/helm 디렉토리로 이동 + cd ~/dip-catalog/manifests/helm + + # helm repo 추가 + helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.13.0 + helm repo update + + # helm 차트 조회 + helm search repo flink-operator-repo/flink-kubernetes-operator + + # helm 차트 다운로드 + helm pull flink-operator-repo/flink-kubernetes-operator + + # 차트 압축 해제 + tar xzvf flink-kubernetes-operator-*.tgz + + # 필요 없는 파일 삭제 + rm flink-kubernetes-operator-*.tgz + ``` + +## 3. git push +- 갱신작업 진행후 commit +``` +$ git add . +$ git commit -m "update flink-kubernetes-operator/1.13.0" +``` + +- main 브랜치에 체크아웃 후 merge +``` +$ git checkout main +$ git merge update-flink-kubernetes-operator/1.13.0 +``` + +- git에 push 후 작업 브랜치 삭제 +``` +$ git push -u origin main +$ git branch -d update-flink-kubernetes-operator/1.13.0 +``` + +## 4. 차트 버전 정보 + +- flink-kubernetes-operator/1.13.0 + - Apache Flink Kubernetes Operator를 통한 Flink 클러스터 관리 및 배포 + - Kubernetes 네이티브 방식으로 Flink 애플리케이션 라이프사이클 관리 + - FlinkDeployment, FlinkSessionJob 등 CRD를 통한 선언적 배포 지원 + - 서비스 배포를 위하여 custom-values.yaml에 정의하였다. + - 차트의 빌드 방법과 배포 방법을 BUILD-README.md, CUSTOM-README.md 문서에 작성하였다. + - Webhook을 통한 리소스 검증 및 변환 기능 제공 diff --git a/manifests/helm/flink-kubernetes-operator/CUSTOM-README.md b/manifests/helm/flink-kubernetes-operator/CUSTOM-README.md new file mode 100644 index 0000000..9b7bb2c --- /dev/null +++ b/manifests/helm/flink-kubernetes-operator/CUSTOM-README.md @@ -0,0 +1,204 @@ +# Flink Kubernetes Operator 배포 + +## 1. 배포 방법 +- 명령어 + ``` sh + $ helm upgrade flink-kubernetes-operator ../flink-kubernetes-operator --install \ + --namespace flink-operator-system \ + --create-namespace \ + -f ./custom-values.yaml + ``` + + + +## 2. custom-values.yaml 설명 + +- custom-values.yaml에 정의된 값에 대한 설명이다. + +### 1) 이미지 설정 +- private 환경 배포시 사용한다. + +| Name | 설명 | 기본값 | +| ---------------------- | ------------------------------------------------------------ | ------ | +| `image.repository` | 오프라인 설치 시에 설정 변경 필요.
paasup 설치시에는 "paasup.io/apache/flink-kubernetes-operator"로 설정 | `"ghcr.io/apache/flink-kubernetes-operator"` | +| `image.tag` | 이미지의 태그 설정 | `"b40c553"` | +| `image.pullPolicy` | 이미지 pull 정책 설정 | `"IfNotPresent"` | +| `imagePullSecrets` | private registry 사용시 pull secret 설정 | `[]` | + + + +### 2) Operator Pod 설정 +- operator pod의 수, tolerations, nodeSelector, 리소스 등을 설정한다. + +| Name | 설명 | 기본값 | +| ------------------------ | ---------------------------------- | --------- | +| `replicas` | operator pod의 replicas 설정. (leader election 미설정시 1개만 가능) | `1` | +| `strategy.type` | deployment strategy 설정. (leader election 미설정시 Recreate만 가능) | `"Recreate"` | +| `operatorPod.nodeSelector` | operator pod의 nodeSelector 설정. | `{}` | +| `operatorPod.affinity` | operator pod의 affinity 설정. | `{}` | +| `operatorPod.tolerations` | operator pod의 toleration 설정. | `[]` | +| `operatorPod.resources.requests.cpu` | operator pod의 cpu request 설정. | `"100m"` | +| `operatorPod.resources.requests.memory` | operator pod의 memory request 설정. | `"256Mi"` | +| `operatorPod.resources.limits.cpu` | operator pod의 cpu limits 설정. | `"200m"` | +| `operatorPod.resources.limits.memory` | operator pod의 memory limits 설정. | `"512Mi"` | +| `operatorPod.webhook.resources.requests.cpu` | webhook container의 cpu request 설정. | `"50m"` | +| `operatorPod.webhook.resources.requests.memory` | webhook container의 memory request 설정. | `"128Mi"` | +| `operatorPod.webhook.resources.limits.cpu` | webhook container의 cpu limits 설정. | `"100m"` | +| `operatorPod.webhook.resources.limits.memory` | webhook container의 memory limits 설정. | `"256Mi"` | + + + +### 3) 네임스페이스 감시 설정 + +- Flink Kubernetes Operator가 감시할 네임스페이스를 설정한다. + +| Name | 설명 | 기본값 | +| --------------------------- | ------------------------------------------------------------ | ----------------------- | +| `watchNamespaces` | FlinkDeployment 변경사항을 감시할 네임스페이스 목록. 빈 배열이면 모든 네임스페이스 감시 | `[]` | + + + +### 4) Flink 설정 + +- Flink Operator에 적용되는 configuration을 작성한다. + +| Name | 설명 | 기본값 | +| --------------------------- | ------------------------------------------------------------ | ----------------------- | +| `defaultConfiguration.create` | ConfigMap/VolumeMount 생성 여부 | `true` | +| `defaultConfiguration.append` | 기본 설정에 추가 설정을 덧붙일지 여부 | `true` | +| `defaultConfiguration.flink-conf.yaml` | Flink 설정 오버라이드 | `custom-values.yaml 참조` | +| `defaultConfiguration.log4j-operator.properties` | Operator 로깅 설정 | `custom-values.yaml 참조` | +| `defaultConfiguration.log4j-console.properties` | Flink 애플리케이션 로깅 설정 | `custom-values.yaml 참조` | + + + +### 5) JVM 설정 + +- Operator와 Webhook의 JVM 옵션을 설정한다. + +| Name | 설명 | 기본값 | +| --------------------------- | ------------------------------------------------------------ | ----------------------- | +| `jvmArgs.operator` | Operator JVM 시작 옵션 | `""` | +| `jvmArgs.webhook` | Webhook JVM 시작 옵션 | `""` | +| `jvmArgs.logConfig` | 로그 설정 JVM 옵션 | `"-Dlog4j.configurationFile=/opt/flink/conf/log4j-operator.properties"` | + + + +### 6) TLS 설정 + +- Webhook TLS 인증서 설정 + +| Name | 설명 | 기본값 | +| --------------------------- | ------------------------------------------------------------ | ----------------------- | +| `tls.create` | TLS 인증서 자동 생성 여부 | `false` | +| `tls.secretName` | TLS 인증서 시크릿 이름 | `"flink-operator-cert"` | +| `tls.secretKeyRef.name` | 인증서 패스워드 시크릿 이름 | `"operator-certificate-password"` | +| `tls.secretKeyRef.key` | 인증서 패스워드 시크릿 키 | `"password"` | + + + +## 3. FlinkDeployment 예제 + +### 3.1) 기본 Flink 애플리케이션 배포 + +- Flink Kubernetes Operator 설치 후 FlinkDeployment를 통해 Flink 애플리케이션을 배포할 수 있다. + + ``` yaml + apiVersion: flink.apache.org/v1beta1 + kind: FlinkDeployment + metadata: + name: basic-example + namespace: flink + spec: + image: flink:1.17 + flinkVersion: v1_17 + flinkConfiguration: + taskmanager.numberOfTaskSlots: "2" + serviceAccount: flink + jobManager: + resource: + memory: "2048m" + cpu: 1 + taskManager: + resource: + memory: "2048m" + cpu: 1 + job: + jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar + parallelism: 2 + ``` + +### 3.2) Session 모드 배포 + +- Session 클러스터를 먼저 배포하고 여러 작업을 제출할 수 있다. + + ``` yaml + apiVersion: flink.apache.org/v1beta1 + kind: FlinkDeployment + metadata: + name: session-cluster + namespace: flink + spec: + image: flink:1.17 + flinkVersion: v1_17 + flinkConfiguration: + taskmanager.numberOfTaskSlots: "2" + serviceAccount: flink + jobManager: + resource: + memory: "2048m" + cpu: 1 + taskManager: + resource: + memory: "2048m" + cpu: 1 + --- + apiVersion: flink.apache.org/v1beta1 + kind: FlinkSessionJob + metadata: + name: session-job-example + namespace: flink + spec: + deploymentName: session-cluster + job: + jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar + parallelism: 2 + ``` + +### 3.3) 리소스 제한 및 노드 선택 + +- 특정 노드에 배포하고 리소스를 제한하는 예제 + + ``` yaml + apiVersion: flink.apache.org/v1beta1 + kind: FlinkDeployment + metadata: + name: resource-limited-example + namespace: flink + spec: + image: flink:1.17 + flinkVersion: v1_17 + flinkConfiguration: + taskmanager.numberOfTaskSlots: "2" + serviceAccount: flink + podTemplate: + spec: + nodeSelector: + node-type: flink-worker + tolerations: + - key: "flink-dedicated" + operator: "Equal" + value: "true" + effect: "NoSchedule" + jobManager: + resource: + memory: "2048m" + cpu: 1 + taskManager: + resource: + memory: "2048m" + cpu: 1 + replicas: 2 + job: + jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar + parallelism: 4 \ No newline at end of file