1. 架構(gòu)圖
參考:部署驗證demo
2. helm 安裝operator
安裝cert-manager依賴
Jetstack/cert-manager 是 Kubernetes 生態(tài)系統(tǒng)中的一款開源項目,它提供了一種自動化的方式來管理 TLS 證書的生命周期
kubectl create -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
# helm 安裝 , 包含 deploy*1 、cm*1、crd*2 以及 rbac sa webhook
kubectl create -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml
helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.7.0/
helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator
3. 集群知識
k8s上的兩種模式:Native和Standalone
Flink Kubernetes Operator 支持:原生部署native(默認)和獨立部署standalone
可以使用部署規(guī)范中的 mode 字段設置部署模式。
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
...
spec:
...
mode: standalone
兩種CR
FlinkDeployment CR 定義了 Flink 應用程序和會話集群部署。
FlinkSessionJob CR 定義了 Session 集群上的會話任務(Job)
Flink Kubernetes Operator 支持兩種主要類型的部署:Application集群 和 Session集群 ,k8s上不支持Job集群。
4. 運行集群實例
Demo1:Application 集群
一次性任務,只有一個Job,執(zhí)行器和邏輯代碼打包成一個jar,直接運行,運行即結(jié)束。
# 此crd創(chuàng)建后,operator會創(chuàng)建:
# 1個deploy(即jobmanager,鏡像為flink:1.17)
# 1個pod(即taskManager,鏡像也是flink:1.17,任務jar包在鏡像中)
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
name: basic-example
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
upgradeMode: stateless
注:k8s不支持Job集群,可以看做是 Flink Application 集群”客戶端運行“的替代方案。集群管理器為每個提交的作業(yè)啟動一個集群。
Demo2:Session集群
多租戶,多個job,每個sessionjob代表一個job,有提交jar包的功能。
Session使用與Application 集群類似的規(guī)范,唯一的區(qū)別是 job 未定義。
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
name: basic-session-deployment-example
spec:
image: flink:1.17
flinkVersion: v1_17
jobManager:
resource:
memory: "2048m"
cpu: 1
taskManager:
resource:
memory: "2048m"
cpu: 1
serviceAccount: flink
---
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:
name: basic-session-job-example
spec:
deploymentName: basic-session-deployment-example
job:
jarURI: https://repo1.maven.org/maven2/org/apache/flink/flink-examples-streaming_2.12/1.16.1/flink-examples-streaming_2.12-1.16.1-TopSpeedWindowing.jar
parallelism: 4
upgradeMode: stateless
---
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:
name: basic-session-job-example2
spec:
deploymentName: basic-session-deployment-example
job:
jarURI: https://repo1.maven.org/maven2/org/apache/flink/flink-examples-streaming_2.12/1.16.1/flink-examples-streaming_2.12-1.16.1.jar
parallelism: 2
upgradeMode: stateless
entryClass: org.apache.flink.streaming.examples.statemachine.StateMachineExample
注:為了方便訪問,可以再創(chuàng)建ingress。svc端口默認為8081,指向svc-rest即可。
優(yōu)劣
- Session集群,是常規(guī)的共享方式。
- Application集群,提供了更好的隔離,生命周期與程序邏輯有關(guān)。
- Job集群,適合長期運行、要求高穩(wěn)定性的大型作業(yè)。(啟動慢)
5. 高可用部署
Flink 提供了兩種高可用服務實現(xiàn):
- ZooKeeper:每個 Flink 集群部署都可以使用 ZooKeeper HA 服務。它們需要一個運行的 ZooKeeper 復制組(quorum)。
- Kubernetes:Kubernetes HA 服務只能運行在 Kubernetes 上。
注:Flink 持久化元數(shù)據(jù)和 job 組件,直到作業(yè)執(zhí)行成功、被取消或最終失敗,再刪除。
我在實踐時,遇到兩個問題:
問題1:High availability should be enabled when starting standby JobManagers
直接增加jobManager的副本數(shù)提示上述錯誤,要先做選舉配置,我選擇的是k8s實現(xiàn),下面僅列出修改部分,注意flinkConfiguration
和podTemplate
兩部分:文章來源:http://www.zghlxwxcb.cn/news/detail-850873.html
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
spec:
flinkConfiguration:
high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory
high-availability.storageDir: file:///flink-data/ha
web.upload.dir: /flink-data #會自動創(chuàng)建flink-web-upload目錄保存上傳的jar包
jobManager:
replicas: 2
taskManager:
replicas: 2
podTemplate:
spec:
containers:
- name: flink-main-container
volumeMounts:
- mountPath: /flink-data
name: flink-volume
volumes:
- name: flink-volume
persistentVolumeClaim:
claimName: flink-ha
問題2:The base directory of the JobResultStore isn’t accessible
如果沒有正確掛載存儲卷提示上述錯誤。
官方demo配置的卷是宿主機的路徑,如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-850873.html
volumes:
- name: flink-volume
hostPath:
path: /tmp/flink # 如果宿主機上沒有這個路徑會報錯
type: Director
6. 補充
- 拉取國外鏡像比較困難,可以使用https://dockerproxy.com/
- 搭建多租戶PaaS平臺,可以使用Session方式,新任務可以通過CR進行管理,也可以由頁面添加jar包。
- 本文內(nèi)容來源于Flink官網(wǎng),進行翻譯、簡化、整理,供大家參考~
到了這里,關(guān)于【梳理】k8s使用Operator搭建Flink集群(高可用可選)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!