Flink on K8S生产集群使用StreamPark管理

(一)直接部署(手动测试用,不推荐)

Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式,两者对比 Application 模式部署规避了 Session 模式的资源隔离问题、以及客户端资源消耗问题,因此生产环境更推荐采用 Application Mode 部署 Flink 任务。下面我们分别看看使用原始脚本的方式和使用 StreamPark 开发部署一个 Flink on Native Kubernetes 作业的流程。
使用脚本方式部署Kubernetes

  1. 在 Flink 客户端节点准备 kubectl 和 Docker 命令运行环境,创建部署 Flink 作业使用的 Kubernetes Namespace 和 Service Account 以及进行 RBAC
  2. 编写 Dockerfile 文件,将 Flink 基础镜像和用户的作业 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
  1. 使用 Flink 客户端脚本启动 Flink 任务
./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
  1. 使用 Kubectl 命令获取到 Flink 作业的 WebUI 访问地址和 JobId
kubectl -n flink-cluster get svc
  1. 使用Flink命令停止作业
./bin/flink cancel--target kubernetes-application-Dkubernetes.cluster-id=my-first-application-cluster-Dkubernetes.namespace=flink-cluster <jobId

以上就是使用 Flink 提供的最原始的脚本方式把一个 Flink 任务部署到 Kubernetes 上的过程,只做到了最基本的任务提交,如果要达到生产使用级别,还有一系列的问题需要解决,如:方式过于原始无法适配大批量任务、无法记录任务checkpoint 和实时状态跟踪、任务运维和监控困难、无告警机制、 无法集中化管理等等。

(二)使StreamPark平台(推荐)

官网:https://streampark.apache.org/docs/intro/

一、登陆

#地址
http://xxxx:10000/

二、 平台初始化配置

2.1 配置Docker Register

img

2.2 配置Flink Home

注:按需配置,需要下载好flink的安装包,建议放到nfs共享文件夹中,即使streampark宕机恢复也不影响

img

2.3 告警配置

img

2.4 团队管理

为了方便管理公司内不同部门的作业,StreamPark 支持了团队管理。系统管理员可以在 StreamPark 上为不同部门创建不同的团队。
团队类似于工作空间的概念,当选择团队后平台只会展示当前团队的作业和项目。如果用户在多个团队有权限,切换到其他团队即可查看或操作相应团队的作业。
img
2.5 权限配置

注:
ADMIN 创建或修改用户时可以指定用户类型,用户类型有 ADMIN 和 USER 两种。

  • ADMIN 表示系统管理员,即:StreamPark 的超级管理员,有 StreamPark 管理页面以及各个团队的所有权限。
  • USER 表示平台的普通用户。创建 USER 只是创建账号的过程,默认普通用户在平台没有任何权限。创建 USER 后且系统管理员给 USER 在一些团队绑定角色后,USER 才会在相应团队有权限。
    img

三、k8s集群初始化配置

基础环境配置包括 Kubernetes 和 Docker 仓库信息以及 Flink 客户端的信息配置。对于 Kubernetes 基础环境最为简单的方式是直接拷贝 Kubernetes 节点的 .kube/config 到 StreamPark 节点用户目录,之后使用 kubectl 命令创建 Flink 专用的 Kubernetes Namespace 以及进行 RBAC 配置。

# 创建Flink作业使用的k8s namespace
kubectl create namespace flink
kubectl create serviceaccount flink
# 对flink用户进行RBAC资源绑定
kubectl create clusterrolebinding flink-role-bind --clusterrole=edit --serviceaccount=flink:flink

四、任务发布

StreamPark 做好基础环境配置之后只需要三步即可开发部署一个 Flink 作业:
img
StreamPark 既支持 Upload Jar 也支持直接编写 Flink SQL 作业, Flink SQL 作业只需要输入SQL 和 依赖项即可, 该方式大大提升了开发体验, 并且规避了依赖冲突等问题,对此部分本文不重点介绍。
这里需要选择部署模式为 kubernetes application, 并且需要在作业开发页面进行以下参数的配置:红框中参数为 Flink on Kubernetes 基础参数。

配置说明:
Kubernetes Namespace:flink任务建议统一放入flink命名空间内
Kubernetes ClusterId:任务名自定义即可
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:如需进入flink的网页端页面选用NodePort,不需要进入则选用ClusterIp,不要用loadbalancer,会进入公网ip

img

下面参数为 Flink 作业和资源相关的参数,Resolve Order 的选择与代码加载模式有关,对于 DataStream API 开发的 Upload Jar上传的作业选择使用 Child-first,Flink SQL 作业选择使用 Parent-first 加载。
img
最后就是下面这两个重量级参数了,对于 Native Kubernetes 而言,k8s-pod-template 一般只需要进行 pod-template 配置即可,Dynamic Option 是 pod-template 参数的补充,对于一些个性化配置可以在 Dynamic Option 中配置。更多 Dynamic Option 直接参考 Flink 官网即可。

测试用:

img
生产用
Pod Template配置

apiVersion: v1
kind: Pod
metadata:#pod配置名称,不需要修改name: pod-template
spec:#选择k8s的namespace,与界面配置要一致serviceAccount: flinkcontainers:#flink启动的默认名称,不可更改- name: flink-main-containerenv:#时区配置,默认时区与中国地区时区不一致- name: TZvalue: Asia/Shanghaiimage:#持久化保存,容器内地址与nfs地址的映射volumeMounts:- name: data-flink#容器内的地址mountPath: /opt/flink/job  - name: data-streamparkmountPath: /log/streampark       imagePullSecrets:- name: regsecret#配置容器内的host,可自己调整,格式不要改hostAliases:- ip: "xxx"hostnames:- "xxx"- ip: "xxx"hostnames:- "xxx"- ip: "xxx"hostnames:- "xxx"#与上述volumeMounts对应,配置实际的分布式或者本地地址volumes:- name: data-flink#公司nfs地址配置,配置前需要检查nfs中是否有该文件夹nfs:path: /data_flinkserver: xxx- name: data-streamparknfs:path: /data_streamparkserver: 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任务高可用配置
-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

五、作业上线

作业开发完成之后是作业上线环节,在这一环节中 StreamPark 做了大量的工作,具体如下:

  • 准备环境
  • 作业中的依赖下载
  • 构建作业(打JAR包)
  • 构建镜像
  • 推送镜像到远程仓库
    对于用户来说: 只需要点击任务列表中的云状的上线按钮即可。
    img
    在镜像构建和推送的时候我们可以看到 StreamPark 做的一系列工作: 读取配置、构建镜像、推送镜像到远程仓库…
    img

六、作业提交

最后只需要点击 Operation 里 start Application 按钮便可启动一个 Flink on Kubernetes 作业,作业启动成功之后点击作业名便可跳转到 Jobmanager WebUI 页面、整个过程非常简单丝滑。
img
整个过程仅需上述三步,即可完成在 StreamPark 上开发和部署一个Flink on Kubernetes 作业。而 StreamPark 对于 Flink on Kubernetes 的支持远远不止提交个任务这么简单。

七、作业管理

任务恢复:
savepoint选择Dynamic Properties配置的地址+启动时创建的文件夹名(文件夹名需要去挂载的nfs上查看,且需要具体的chk名),
如配置为:-Dstate.checkpoints.dir=file:///opt/flink/job/checkpoints/test
此处应填写:/opt/flink/job/checkpoints/test/6b73526ea07b1c6b84b9aae159b05aaa/chk-32
img
img

八、StreamPark不足

  • StreamPark不支持 Flink 作业 Metric 监控
  • 每次增加作业都会形成一个新的镜像,镜像过大
  • streampark:2.1.2版本腾讯k8s(TKE)安装存在bug,运行状态一直显示starting

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 async-profiler 分析 CPU 和 内存使用情况

async-profiler 是非常主流的 Java Profiling 工具之一&#xff0c;且对 Linux 支持良好&#xff0c;适合分析运行在服务器上的 Java 应用程序在 CPU 和内存上的占用情况。本文介绍一下 async-profiler 的安装和使用方法。 1. 安装 wget https://github.com/jvm-profiling-too…

人工智能 机器学习 深度学习:概念,关系,及区别说明

如果过去几年&#xff0c;您读过科技主题的文章&#xff0c;您可能会遇到一些新词汇&#xff0c;如人工智能&#xff08;Artificial Intelligence&#xff09;、机器学习&#xff08;Machine Learning&#xff09;和深度学习&#xff08;Deep Learning&#xff09;等。这三个词…

Tuxera NTFS for Mac2024免费Mac读写软件下载教程

在日常生活中&#xff0c;我们使用Mac时经常会遇到外部设备不能正常使用的情况&#xff0c;如&#xff1a;U盘、硬盘、软盘等等一系列存储设备&#xff0c;而这些设备的格式大多为NTFS&#xff0c;Mac系统对NTFS格式分区存在一定的兼容性问题&#xff0c;不能正常读写。 那么什…

WPF+Halcon 培训项目实战(1-5):Halcon安装,图像处理,Halcon简单模板匹配

文章目录 前言相关链接项目专栏我个人对就业市场的评价Halcon安装实战1-4&#xff1a;Halcon基础实战5&#xff1a;模板匹配[形状匹配]实战代码 结尾 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主…

案例189:基于微信小程序的高校教务管理系统设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

Eclipse安装Jrebel eclipse免重启加载项目

每次修改JAVA文件都需要重新启动项目&#xff0c;加载时间太长&#xff0c;eclipse安装jrebel控件,避免重启项目节省时间。 1、Help->Eclipse Marketplace 2、搜索jrebel 3、Help->jrebel->Configuration 配置jrebel 4、激活jrebel 5、在红色框中填入 http://jrebel…

ajax请求——XMLHttpRequest请求

个人练习笔记-----Ajax01 一、GET <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</t…

嵌入式高薪岗位解析——单机片开发

很多人都问&#xff0c;什么专业适合做单机片开发呢 那么以下是一些可能适合从事单片机开发岗位的专业&#xff1a; 电子信息工程专业物联网工程专业嵌入式技术与应用专业应用电子技术专业软件技术专业自动化控制专业信息工程专业电气自动化等相关专业 此外&#xff0c;从事…

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录

Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录 之前发布过Window方式,这次结合以上主题,完善下Linux相关登入方式过程,纯属做个记录,有需要的朋友可以做个学习参考。 一、Windows环境提示“‘mysql’ 不是内部或外部命令,也不是可运行的程序或批…

赏金猎人必学站点(梯外)

What to learn? Technical- Computer Fundamentals https://www.comptia.org/training/by-certification/a https://www.youtube.com/watch?vtIfRDPekybU https://www.tutorialspoint.com/computer_fundamentals/index.htm https://onlinecourses.swayam2.ac.in/cec19_cs…

Spring Cloud Gateway 常见过滤器的基本使用

目录 1. 过滤器的作用 2. Spring Cloud Gateway 过滤器的类型 2.1 内置过滤器 2.1.1 AddResponseHeader 2.1.2 AddRequestHeader 2.1.3 PrefixPath 2.1.4 RequestRateLimiter 2.1.5 Retry 2.2 自定义过滤器 1. 过滤器的作用 过滤器通常用于拦截、处理或修改数据流和事…

Oracle database 静默安装 oracle12c 一键安装 12.1.0.2

基于oracle安装包中应答文件实现一键安装 注意此安装脚本基于12.1.0.2 安装包 原始安装包结构为两个压缩包 此脚本使用安装包为原始压缩包解压后、 重新封装为一个.zip压缩包 建议在linux 环境下解压重新压缩后 使用该脚本 支持环境: Linux :centerOS 7 oracle :12.1.0.…

Docker 概念介绍

1、Docker 简介 Docker一个快速交付应用、运行应用的技术: 可以将程序及其依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器&#xff0c;各个应用互不干扰启动、移除都可以通过一行命令完成&#xff0c;方便快捷 Doc…

three.js实现3D汽车展厅效果展示

项目搭建 本案例还是借助框架书写three项目&#xff0c;借用vite构建工具搭建vue项目&#xff0c;搭建完成之后&#xff0c;用编辑器打开该项目&#xff0c;在终端执行 npm i 安装一下依赖&#xff0c;安装完成之后终端在安装 npm i three 即可。 因为我搭建的是vue3项目&…

【Python学习笔记(十)】串口被占用导致无法访问的解决办法

串口被占用导致无法访问的解决办法 前言正文1、封装串口打开函数2、解决过程3、实现效果 前言 在项目开发中需要用到串口进行通讯&#xff0c;但当有其他串口调试工具、串口助手等打开占用了某一端口&#xff0c;打开串口时会导致程序卡死&#xff0c;针对这一问题的出现及解决…

苹果手机打开Microsoft Outlook日历ics文件方法

作为一名经常需要处理各种日程安排的苹果用户&#xff0c;我深知ics文件的重要性。ics文件通常来自于我们日常使用的日历应用&#xff0c;比如Microsoft Outlook&#xff0c;是日程信息的标准格式。但很多时候&#xff0c;当我们尝试打开这些ics文件时&#xff0c;却会遇到种种…

gulimall-002 分布式基础概念

1、微服务概念 微服务是一种非常流行的架构风格。 拒绝大型单体应用&#xff0c;基于业务边界进行服务微化拆分&#xff0c;各个服务独立部署运行。 每个服务运行在自己的单个进程使用轻量级机制通信可以使用不同的编程语言编写以及不同的数据存储技术 2、集群&分布式&…

pyCharm 打印控制台中文乱码解决办法

解决方法 在 "File" -> "Settings" 中的控制台设置&#xff1a; 在 "File" -> "Settings" 中&#xff0c;你可以找到 "Editor" -> "General" -> "Console"。在这里&#xff0c;你可能会找到…

docker学习(十八、network介绍)

[TOC]添加链接描述 首先&#xff0c;我们要知道什么是 Docker 网络。简单来说&#xff0c;它就是 Docker 中用于实现容器间通信的一个东西。 network相关内容&#xff1a; docker学习&#xff08;十八、network介绍&#xff09; docker学习&#xff08;十九、network使用示例br…

【快速全面掌握 WAMPServer】03.玩转安装和升级

网管小贾 / sysadm.cc 大多数情况我们在了解和学习任何一款软件之前都会先去尝试一下软件的安装&#xff0c;毕竟只有安装好了软件&#xff0c;再通过使用它来进一步学习和掌握。 那么同样的道理&#xff0c;我们要学习和掌握如何动手搭建 PHP 的调试环境&#xff0c;那么作为…