【Flink】Apache Flink ~ 環境構築 / Kubernetes 編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/03/05/235755

で、Windowsのローカル上に、Apache Flink の環境構築したのだが
Kubernetes (Amazon EKS) で構築することになったので
予習として、自分のローカル上に構築してみる。

目次

【1】Kubernetes によるApache Flink構築の種類
 1)Standalone Mode
 2)Native Mode
 3)Kubernetes Operator
【2】設定環境
【3】設定手順
 0)Kubernetesクラスタの起動
 1)Helmのインストール
 2)Flink Kubernetes operatorのインストール
 3)コンテナイメージの作成
 4)FlinkDeployment の apply
 5)ポートフォワーディングの設定

【1】Kubernetes によるApache Flink構築の種類

1)Standalone Mode
2)Native Mode
3)Kubernetes Operator

1)Standalone Mode

* 各コンポーネント(JobManager、Taskamanager)のPodそれぞれが起動し続ける

2)Native Mode

* Flink Job毎にTask ManagerのPodが立ち上がり、Jobの終了に伴いそのPodも終わる

3)Kubernetes Operator

* 監視・対応をするOperatorが常駐し、必要なコンポーネントを管理

【2】設定環境

* OS: Ubuntu 20.04 (Windows10のWSL2上)
* K8S: minikube v1.30.1

【3】設定手順

* 今回は、「Kubernetes Operator」で構築してみる

0)Kubernetesクラスタの起動

環境の確認

# Validate minikube
minikube version

# Validate kubectl
kubectl version

Kubernetesクラスタ(Minikube)を起動

# Minikube の稼働状況を確認
minikube status

minikube start

1)Helmのインストール

* Helm のインストールおよび詳細については、以下の関連記事を参照のこと

Kubernetes ~ 基本編 / Helm ~
https://dk521123.hatenablog.com/entry/2023/05/11/000840

helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.4.0/
# 「"flink-operator-repo" has been added to your repositories」って言われる

helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator
# 以下のように出力される
# NAME: flink-kubernetes-operator
# LAST DEPLOYED: Tue May  9 23:52:21 2023
# NAMESPACE: default
# STATUS: deployed
# REVISION: 1
# TEST SUITE: None

3)コンテナイメージの作成

[1] 実行したいjarを用意

# 今回は、サンプルの「WordCount.jar」を使用する

mkdir flink
cd flink

# Apache Flink Download (See https://flink.apache.org/downloads/)
wget https://dlcdn.apache.org/flink/flink-1.17.0/flink-1.17.0-bin-scala_2.12.tgz

# Unzip
tar xvzf flink-1.17.0-bin-scala_2.12.tgz

# Copy WordCount.jar
cp ./flink-1.17.0/examples/streaming/WordCount.jar ./
# To confirm WordCount.jar
ls -l

[2] Dockerfileを作成する

vi Dockerfile
# 内容は、以下の「Dockerfile」を参照

Dockerfile
https://flink.apache.org/downloads/

FROM flink:1.17.0
ENV FLINK_PLUGINS_DIR=/opt/flink/plugins
COPY WordCount.jar $FLINK_PLUGINS_DIR/hadoop-fs/

[3] コンテナイメージを作成する

docker image build -t flink-with-word-count:v.0.0.1 .

# minikubeで動かす場合は、build後に以下を行う
minikube image load flink-with-word-count:v.0.0.1
# 「Killed」と出力

4)FlinkDeployment の apply

[2] FlinkDeploymentファイルを作成する

vi kubernetes-operator-for-flink.yml
# 内容は、以下「kubernetes-operator-for-flink.yml」を参照

kubernetes-operator-for-flink.yml

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: basic-example
spec:
  image: flink-with-word-count:v.0.0.1
  imagePullPolicy: Never
  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/plugins/hadoop-fs/WordCount.jar
    parallelism: 2

[2] FlinkDeploymentファイルをapply

kubectl apply -f kubernetes-operator-for-flink.yml 
# 「flinkdeployment.flink.apache.org/basic-example created」が出力

[3] 動作確認

# Podの確認(Runningになるまで時間かかるかも)
kubectl get pod
# 詳細が知りたい場合は、以下。
kubectl describe pods

# Serviceの確認
kubectl get service

5)ポートフォワーディングの設定

kubectl port-forward svc/basic-example-rest 8081

参考文献

https://qiita.com/KentOhwada_AlibabaCloudJapan/items/2f68a913925012dfaa76
https://zenn.dev/notrogue/articles/73a919cb192b2a
https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.5/docs/try-flink-kubernetes-operator/quick-start/

関連記事

Apache Flink ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/03/01/235100
Apache Flink ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/05/235755
Apache Flink ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/29/000000
Apache Flink ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/07/23/161621
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ 基本編 / kubectlコマンド ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
Kubernetes ~ 基本編 / Helm ~
https://dk521123.hatenablog.com/entry/2023/05/11/000840
Amazon EKS ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/02/23/000000