# 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