Add flink kubernetes operator docs
This commit is contained in:
@@ -2225,3 +2225,41 @@ openfga:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 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"
|
||||
```
|
||||
|
||||
---
|
||||
@@ -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
|
||||
@@ -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을 통한 리소스 검증 및 변환 기능 제공
|
||||
@@ -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` | 오프라인 설치 시에 설정 변경 필요. <br />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
|
||||
Reference in New Issue
Block a user