(一)直接部署(手動測試用,不推薦)
Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式,兩者對比 Application 模式部署規(guī)避了 Session 模式的資源隔離問題、以及客戶端資源消耗問題,因此生產(chǎn)環(huán)境更推薦采用 Application Mode 部署 Flink 任務(wù)。下面我們分別看看使用原始腳本的方式和使用 StreamPark 開發(fā)部署一個 Flink on Native Kubernetes 作業(yè)的流程。
使用腳本方式部署Kubernetes
- 在 Flink 客戶端節(jié)點準(zhǔn)備 kubectl 和 Docker 命令運行環(huán)境,創(chuàng)建部署 Flink 作業(yè)使用的 Kubernetes Namespace 和 Service Account 以及進(jìn)行 RBAC
- 編寫 Dockerfile 文件,將 Flink 基礎(chǔ)鏡像和用戶的作業(yè) Jar 打包到一起
Explain
FROM flink:1.13.6-scala_2.11
RUN mkdir -p $FLINK_HOME/usrlib
COPY my-flink-job.jar $FLINK_HOME/usrlib/my-flink-job.jar
- 使用 Flink 客戶端腳本啟動 Flink 任務(wù)
./bin/flink run-application \
--target kubernetes-application \
-Dkubernetes.namespace=flink-cluster \
-Dkubernetes.jobmanager.service-account=default \
-Dkubernetes.cluster-id=my-first-application-cluster \
-Dkubernetes.container.image=relx_docker_url/streamx/relx_flink_1.13.6-scala_2.11:latest \
-Dkubernetes.rest-service.exposed.type=NodePort \
local:///opt/flink/usrlib/my-flink-job.jar
- 使用 Kubectl 命令獲取到 Flink 作業(yè)的 WebUI 訪問地址和 JobId
kubectl -n flink-cluster get svc
- 使用Flink命令停止作業(yè)
./bin/flink cancel
--target kubernetes-application
-Dkubernetes.cluster-id=my-first-application-cluster
-Dkubernetes.namespace=flink-cluster <jobId
以上就是使用 Flink 提供的最原始的腳本方式把一個 Flink 任務(wù)部署到 Kubernetes 上的過程,只做到了最基本的任務(wù)提交,如果要達(dá)到生產(chǎn)使用級別,還有一系列的問題需要解決,如:方式過于原始無法適配大批量任務(wù)、無法記錄任務(wù)checkpoint 和實時狀態(tài)跟蹤、任務(wù)運維和監(jiān)控困難、無告警機(jī)制、 無法集中化管理等等。
(二)使StreamPark平臺(推薦)
官網(wǎng):https://streampark.apache.org/docs/intro/
一、登陸
#地址
http://xxxx:10000/
二、 平臺初始化配置
2.1 配置Docker Register
2.2 配置Flink Home
注:按需配置,需要下載好flink的安裝包,建議放到nfs共享文件夾中,即使streampark宕機(jī)恢復(fù)也不影響
2.3 告警配置
2.4 團(tuán)隊管理
為了方便管理公司內(nèi)不同部門的作業(yè),StreamPark 支持了團(tuán)隊管理。系統(tǒng)管理員可以在 StreamPark 上為不同部門創(chuàng)建不同的團(tuán)隊。
團(tuán)隊類似于工作空間的概念,當(dāng)選擇團(tuán)隊后平臺只會展示當(dāng)前團(tuán)隊的作業(yè)和項目。如果用戶在多個團(tuán)隊有權(quán)限,切換到其他團(tuán)隊即可查看或操作相應(yīng)團(tuán)隊的作業(yè)。
2.5 權(quán)限配置
注:
ADMIN 創(chuàng)建或修改用戶時可以指定用戶類型,用戶類型有 ADMIN 和 USER 兩種。
- ADMIN 表示系統(tǒng)管理員,即:StreamPark 的超級管理員,有 StreamPark 管理頁面以及各個團(tuán)隊的所有權(quán)限。
- USER 表示平臺的普通用戶。創(chuàng)建 USER 只是創(chuàng)建賬號的過程,默認(rèn)普通用戶在平臺沒有任何權(quán)限。創(chuàng)建 USER 后且系統(tǒng)管理員給 USER 在一些團(tuán)隊綁定角色后,USER 才會在相應(yīng)團(tuán)隊有權(quán)限。
三、k8s集群初始化配置
基礎(chǔ)環(huán)境配置包括 Kubernetes 和 Docker 倉庫信息以及 Flink 客戶端的信息配置。對于 Kubernetes 基礎(chǔ)環(huán)境最為簡單的方式是直接拷貝 Kubernetes 節(jié)點的 .kube/config 到 StreamPark 節(jié)點用戶目錄,之后使用 kubectl 命令創(chuàng)建 Flink 專用的 Kubernetes Namespace 以及進(jìn)行 RBAC 配置。
# 創(chuàng)建Flink作業(yè)使用的k8s namespace
kubectl create namespace flink
kubectl create serviceaccount flink
# 對flink用戶進(jìn)行RBAC資源綁定
kubectl create clusterrolebinding flink-role-bind --clusterrole=edit --serviceaccount=flink:flink
四、任務(wù)發(fā)布
StreamPark 做好基礎(chǔ)環(huán)境配置之后只需要三步即可開發(fā)部署一個 Flink 作業(yè):
StreamPark 既支持 Upload Jar 也支持直接編寫 Flink SQL 作業(yè), Flink SQL 作業(yè)只需要輸入SQL 和 依賴項即可, 該方式大大提升了開發(fā)體驗, 并且規(guī)避了依賴沖突等問題,對此部分本文不重點介紹。
這里需要選擇部署模式為 kubernetes application, 并且需要在作業(yè)開發(fā)頁面進(jìn)行以下參數(shù)的配置:紅框中參數(shù)為 Flink on Kubernetes 基礎(chǔ)參數(shù)。
配置說明:
Kubernetes Namespace:flink任務(wù)建議統(tǒng)一放入flink命名空間內(nèi)
Kubernetes ClusterId:任務(wù)名自定義即可
Flink Base Docker Image :storage/bigdata/flink:1.13.0-scala_2.12-java8s、torage/bigdata/flink:1.14.4-scala_2.12-java8、storage/bigdata/flink:1.16.2-scala_2.12-java8(如需新的版本可自行添加)
Rest-Service Exposed Type:如需進(jìn)入flink的網(wǎng)頁端頁面選用NodePort,不需要進(jìn)入則選用ClusterIp,不要用loadbalancer,會進(jìn)入公網(wǎng)ip
下面參數(shù)為 Flink 作業(yè)和資源相關(guān)的參數(shù),Resolve Order 的選擇與代碼加載模式有關(guān),對于 DataStream API 開發(fā)的 Upload Jar上傳的作業(yè)選擇使用 Child-first,F(xiàn)link SQL 作業(yè)選擇使用 Parent-first 加載。
最后就是下面這兩個重量級參數(shù)了,對于 Native Kubernetes 而言,k8s-pod-template 一般只需要進(jìn)行 pod-template 配置即可,Dynamic Option 是 pod-template 參數(shù)的補(bǔ)充,對于一些個性化配置可以在 Dynamic Option 中配置。更多 Dynamic Option 直接參考 Flink 官網(wǎng)即可。
測試用:
生產(chǎn)用
Pod Template配置
apiVersion: v1
kind: Pod
metadata:
#pod配置名稱,不需要修改
name: pod-template
spec:
#選擇k8s的namespace,與界面配置要一致
serviceAccount: flink
containers:
#flink啟動的默認(rèn)名稱,不可更改
- name: flink-main-container
env:
#時區(qū)配置,默認(rèn)時區(qū)與中國地區(qū)時區(qū)不一致
- name: TZ
value: Asia/Shanghai
image:
#持久化保存,容器內(nèi)地址與nfs地址的映射
volumeMounts:
- name: data-flink
#容器內(nèi)的地址
mountPath: /opt/flink/job
- name: data-streampark
mountPath: /log/streampark
imagePullSecrets:
- name: regsecret
#配置容器內(nèi)的host,可自己調(diào)整,格式不要改
hostAliases:
- ip: "xxx"
hostnames:
- "xxx"
- ip: "xxx"
hostnames:
- "xxx"
- ip: "xxx"
hostnames:
- "xxx"
#與上述volumeMounts對應(yīng),配置實際的分布式或者本地地址
volumes:
- name: data-flink
#公司nfs地址配置,配置前需要檢查nfs中是否有該文件夾
nfs:
path: /data_flink
server: xxx
- name: data-streampark
nfs:
path: /data_streampark
server: xxx
Dynamic Properties
#K8s的service賬戶,flink命令空間使用flink即可
-Dkubernetes.service-account=flink
#容器鏡像拉取策略,建議是always(否則更新配置會不生效)。(Always 總是拉取鏡像;IfNotPresent 本地有則使用本地鏡像,不拉取;Never 只使用本地鏡像,從不拉取,即使本地沒有)
-Dkubernetes.container.image.pull-policy=Always
#checkpoint及savepoints持久化時配置
-Dstate.checkpoint-storage=filesystem
-Dstate.checkpoints.dir=file:///opt/flink/job/checkpoints/test
-Dstate.savepoints.dir=file:///opt/flink/job/savepoints/test
#log日志持久化時配置
-Dkubernetes.flink.log.dir=/opt/flink/job/logs/test
#與界面配置保持一致
-Dkubernetes.cluster-id=test
#flink任務(wù)高可用配置
-Dhigh-availability.type=kubernetes
-Dhigh-availability=org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactory
-Dhigh-availability.storageDir=file:///opt/flink/job/recovery/test
-Drestart-strategy=fixed-delay
-Drestart-strategy.fixed-delay.attempts=3
五、作業(yè)上線
作業(yè)開發(fā)完成之后是作業(yè)上線環(huán)節(jié),在這一環(huán)節(jié)中 StreamPark 做了大量的工作,具體如下:
- 準(zhǔn)備環(huán)境
- 作業(yè)中的依賴下載
- 構(gòu)建作業(yè)(打JAR包)
- 構(gòu)建鏡像
- 推送鏡像到遠(yuǎn)程倉庫
對于用戶來說: 只需要點擊任務(wù)列表中的云狀的上線按鈕即可。
在鏡像構(gòu)建和推送的時候我們可以看到 StreamPark 做的一系列工作: 讀取配置、構(gòu)建鏡像、推送鏡像到遠(yuǎn)程倉庫…
六、作業(yè)提交
最后只需要點擊 Operation 里 start Application 按鈕便可啟動一個 Flink on Kubernetes 作業(yè),作業(yè)啟動成功之后點擊作業(yè)名便可跳轉(zhuǎn)到 Jobmanager WebUI 頁面、整個過程非常簡單絲滑。
整個過程僅需上述三步,即可完成在 StreamPark 上開發(fā)和部署一個Flink on Kubernetes 作業(yè)。而 StreamPark 對于 Flink on Kubernetes 的支持遠(yuǎn)遠(yuǎn)不止提交個任務(wù)這么簡單。文章來源:http://www.zghlxwxcb.cn/news/detail-775393.html
七、作業(yè)管理
任務(wù)恢復(fù):
savepoint選擇Dynamic Properties配置的地址+啟動時創(chuàng)建的文件夾名(文件夾名需要去掛載的nfs上查看,且需要具體的chk名),
如配置為:-Dstate.checkpoints.dir=file:///opt/flink/job/checkpoints/test
此處應(yīng)填寫:/opt/flink/job/checkpoints/test/6b73526ea07b1c6b84b9aae159b05aaa/chk-32文章來源地址http://www.zghlxwxcb.cn/news/detail-775393.html
八、StreamPark不足
- StreamPark不支持 Flink 作業(yè) Metric 監(jiān)控
- 每次增加作業(yè)都會形成一個新的鏡像,鏡像過大
- streampark:2.1.2版本騰訊k8s(TKE)安裝存在bug,運行狀態(tài)一直顯示starting
到了這里,關(guān)于Flink on K8S生產(chǎn)集群使用StreamPark管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!