Flink on k8s 讲解与实战操作

网友投稿 1087 2023-03-26

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

Flink on k8s 讲解与实战操作

一、概述

其针对数据流的分布式计算提供了数据分布,数据通信及容错机制等功能。

Flink 官网:

不同版本的文档:

flink on k8s 官方文档:

GitHub 地址:

二、Flink 运行模式

官方文档:

Flink on yarn 有三种运行模式:

yarn-session 模式(Seesion Mode) yarn-cluster 模式(Per-Job Mode) Application 模式(Application Mode)

【温馨提示】Per-Job 模式(已弃用),Per-job 模式仅由 YARN 支持,并已在 Flink 1.15 中弃用。它将被丢弃在 FLINK-26000 中。

三、Flink on k8s 实战操作

1)flink 下载

下载地址:

2)构建基础镜像

3)session 模式

Flink Session 集群作为长时间运行的 Kubernetes Deployment 执行。你可以在一个 Session 集群上运行多个 Flink 作业。每个作业都需要在集群部署完成后提交到集群。

Kubernetes 中的 Flink Session 集群部署至少包含三个组件:

运行JobManager的部署 TaskManagers池的部署 暴露JobManager 的 REST 和 UI 端口的服务

1、Native Kubernetes 模式

参数配置:

【1】构建镜像 Dockerfile

开始构建镜像

【2】创建命名空间和 serviceaccount

# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account

【3】创建 flink 集群

【4】提交任务

./bin/flink run \--target kubernetes-session \-Dkubernetes.cluster-id=my-first-flink-cluster \-Dkubernetes.namespace=flink \-Dkubernetes.jobmanager.service-account=flink-service-account \./examples/streaming/TopSpeedWindowing.jar # 参数配置./examples/streaming/WordCount.jar-Dkubernetes.taskmanager.cpu=2000m \-Dexternal-resource.limits.kubernetes.cpu=4000m \-Dexternal-resource.limits.kubernetes.memory=10Gi \-Dexternal-resource.requests.kubernetes.cpu=2000m \-Dexternal-resource.requests.kubernetes.memory=8Gi \-Dkubernetes.taskmanager.cpu=2000m \

【温馨提示】注意 jdk 版本,目前 jdk8 是正常的。

【5】查看

kubectl get pods -n flinkkubectl logs -f my-first-flink-cluster-taskmanager-1-1

【6】删除 flink 集群

kubectl delete deployment/my-first-flink-cluster -n flinkkubectl delete ns flink --force

2、Standalone 模式

【1】构建镜像

默认用户是 flink 用户,这里我换成 admin,根据企业需要更换用户,脚本可以通过上面运行的 pod 拿到。

启动脚本 docker-entrypoint.sh

编排 Dockerfile

开始构建镜像

【2】创建命名空间和 serviceaccount

# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account

【3】编排 yaml 文件

flink-configuration-configmap.yaml

jobmanager-service.yaml可选服务,仅非 HA 模式需要。

jobmanager-rest-service.yaml 可选服务,将 jobmanager rest端口公开为公共 Kubernetes 节点的端口。

taskmanager-query-state-service.yaml 可选服务,公开 TaskManager 端口以访问可查询状态作为公共 Kubernetes 节点的端口。

以上几个配置文件是公共的

jobmanager-session-deployment-non-ha.yaml

taskmanager-session-deployment.yaml

【4】创建 flink 集群

kubectl create ns flink# Configuration and service definitionkubectl create -f flink-configuration-configmap.yaml -n flink# servicekubectl create -f jobmanager-service.yaml -n flinkkubectl create -f jobmanager-rest-service.yaml -n flinkkubectl create -f taskmanager-query-state-service.yaml -n flink# Create the deployments for the clusterkubectl create -f jobmanager-session-deployment-non-ha.yaml -n flinkkubectl create -f taskmanager-session-deployment.yaml -n flink

镜像逆向解析 dockerfile

alias whaler="docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock:ro pegleg/whaler"whaler flink:1.14.6-scala_2.12

查看

kubectl get pods,svc -n flink -owide

Web UI 地址:

【5】提交任务

./bin/flink run -m local-168-182-110:30081 ./examples/streaming/WordCount.jar

kubectl logs flink-taskmanager-54649bf96c-zjtkh -n flink

【6】删除 flink 集群

kubectl delete -f jobmanager-service.yaml -n flinkkubectl delete -f flink-configuration-configmap.yaml -n flinkkubectl delete -f taskmanager-session-deployment.yaml -n flinkkubectl delete -f jobmanager-session-deployment.yaml -n flinkkubectl delete ns flink --force

【7】访问 flink web

端口就是jobmanager-rest-service.yaml文件中的 NodePort

4)application 模式(推荐)

Kubernetes 中一个基本的 Flink Application 集群部署包含三个组件:

运行JobManager的应用程序 TaskManagers池的部署 暴露JobManager 的 REST 和 UI 端口的服务

1、Native Kubernetes 模式(常用)

【1】构建镜像 Dockerfile

开始构建镜像

【2】创建命名空间和 serviceacount

# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account

【3】创建 flink 集群并提交任务

【注意】 local是应用模式中唯一支持的方案。local 代表本地环境,这里即 pod 或者容器环境,并非宿主机。

查看

kubectl get pods pods,svc -n flink

kubectl logs -f my-first-application-cluster-taskmanager-1-1 -n flink

【4】删除 flink 集群

kubectl delete deployment/my-first-application-cluster -n flinkkubectl delete ns flink --force

2、Standalone 模式

【1】构建镜像 Dockerfile

启动脚本 docker-entrypoint.sh

编排Dockerfile

【2】创建命名空间和 serviceacount

# 创建namespacekubectl create ns flink# 创建serviceaccountkubectl create serviceaccount flink-service-account -n flink# 用户授权kubectl create clusterrolebinding flink-role-binding-flink --clusterrole=edit --serviceaccount=flink:flink-service-account

【3】编排 yaml 文件

flink-configuration-configmap.yaml

jobmanager-service.yaml可选服务,仅非 HA 模式需要。

jobmanager-rest-service.yaml 可选服务,将 jobmanager rest端口公开为公共 Kubernetes 节点的端口。​

xxxxxxxxxx

1

apiVersion: v1

2

kind: Service

3

metadata:

4

name: flink-jobmanager-rest

5

spec:

6

type: NodePort

7

ports:

8

- name: rest

9

port: 8081

10

targetPort: 8081

11

nodePort: 30081

12

selector:

13

app: flink

15171921232527

taskmanager-query-state-service.yaml 可选服务,公开 TaskManager 端口以访问可查询状态作为公共 Kubernetes 节点的端口。

jobmanager-application-non-ha.yaml ,非高可用

【温馨提示】注意这里的挂载/mnt/bigdata/flink/usrlib,最好这里使用共享目录。

taskmanager-job-deployment.yaml

【4】创建 flink 集群并提交任务

kubectl create ns flink# Configuration and service definitionkubectl create -f flink-configuration-configmap.yaml -n flink# servicekubectl create -f jobmanager-service.yaml -n flinkkubectl create -f jobmanager-rest-service.yaml -n flinkkubectl create -f taskmanager-query-state-service.yaml -n flink# Create the deployments for the clusterkubectl create -f jobmanager-application-non-ha.yaml -n flinkkubectl create -f taskmanager-job-deployment.yaml -n flink

查看

kubectl get pods,svc -n flink

【5】删除 flink 集群

kubectl delete -f flink-configuration-configmap.yaml -n flinkkubectl delete -f jobmanager-service.yaml -n flinkkubectl delete -f jobmanager-rest-service.yaml -n flinkkubectl delete -f taskmanager-query-state-service.yaml -n flinkkubectl delete -f jobmanager-application-non-ha.yaml -n flinkkubectl delete -f taskmanager-job-deployment.yaml -n flinkkubectl delete ns flink --force

【6】查看

kubectl get pods,svc -n flinkkubectl exec -it flink-taskmanager-54cb7fc57c-g484q -n flink -- bash

上一篇:摩卡助力一汽解放 卓越运维拓通途
下一篇:北塔软件用“运维”为制造业增效益
相关文章

 发表评论

暂时没有评论,来抢沙发吧~