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: flink
  containers:
  #flink启动的默认名称,不可更改
  - name: flink-main-container
    env:
    #时区配置,默认时区与中国地区时区不一致
      - name: TZ
        value: Asia/Shanghai
    image:
    #持久化保存,容器内地址与nfs地址的映射
    volumeMounts:
      - name: data-flink
      #容器内的地址
        mountPath: /opt/flink/job  
      - name: data-streampark
        mountPath: /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_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任务高可用配置
-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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用好它们!没有你找不到的电子书

以前读书的时候很喜欢买纸质书籍 &#xff0c;但自从有了 iPad 和智能手机。我发现用智能设备看书似乎性价比更好&#xff0c;不仅可以随时随地阅读 而且还能省不少书的钱&#xff0c;因为电子书网上很多分享几个本人常用的电子书搜索工具。用好这几个工具99% 的书籍你都可以下…

PAT 乙级 1028 人口普查

解题思路&#xff1a;此题我想到俩种方法&#xff0c;一种是排序方法&#xff0c;一种是不排序的方法&#xff0c;首先都是看是否是有效年龄&#xff0c;然后一种是排序&#xff0c;另一种是维护最大值和最小值的变量&#xff0c;一定要注意如果有效数字是0那就只输出0就可以了…

新版ONENET的物联网环境调节系统(esp32+onenet+微信小程序)

新版ONENET的物联网环境调节系统&#xff08;esp32onenet微信小程序&#xff09; 好久没用onenet突然发现它大更新了&#xff0c;现在都是使用新版的物联网开放平台&#xff0c;只有老用户还有老版的多协议接入&#xff0c;新用户是没有的&#xff0c;所以我顺便更新一下新的开…

企业私有云容器化架构运维实战

什么是虚拟化: 虚拟化&#xff08;Virtualization&#xff09;技术最早出现在 20 世纪 60 年代的 IBM 大型机系统&#xff0c;在70年代的 System 370 系列中逐渐流行起来&#xff0c;这些机器通过一种叫虚拟机监控器&#xff08;Virtual Machine Monitor&#xff0c;VMM&#x…

会议室占用时间段 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 现有若干个会议,所有会议共享一个会议室,用数组表示各个会议的开始时间和结束时间, 格式为: [[会议1开始时间,会议1结束时间],[会议2开始时间,会议2结束时间]] 请计算会议室占用时间段。 输入描述 [[会议1开始时间,…

数据库——LAMP的搭建及MySQL基操

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;并对…

关于增强监控以检测针对Outlook Online APT活动的动态情报

一、基本内容 2023年6月&#xff0c;联邦民事行政部门&#xff08;FCEB&#xff09;在其Microsoft 365&#xff08;M365&#xff09;云环境中发现了可疑活动。该机构迅速向Microsoft和网络安全和基础设施安全局&#xff08;CISA&#xff09;报告了此情况。经过深入调查&#x…

【架构】企业信息安全体系架构详解

企业信息安全体系架构来说,是包含技术、运维、管理3个层面。本文说的安全架构,主要集中讨论偏研发技术层面的安全架构。 安全性是软件研发技术体系,系统架构设计阶段的一个关键DFX能力,与可靠性、可服务性、性能等架构属性并列。由于安全性设计自身的特点,涉及到系统架构…

Zblog主题模板:zblog博客主题aymeleven

zblog主题模板&#xff1a;zblog博客主题aymeleven zblog博客主题aymeleven主要是以文字内容为主导&#xff0c;将页面的设计杂乱的图片和元素进行最小化或者去除&#xff0c;从而使整个页面更加简洁、清晰&#xff0c;突出信息的呈现。 下面介绍一下zblog主题模板:zblog博客主…

AI产品经理 - 技术课-要不要懂技术(上)

一、AI产品经理&#xff0c;要不要懂技术&#xff1a;笔者答案是肯定的 1.AI产品经理要懂产品方案 2.不懂算法&#xff0c;会遇到问题&#xff1a;没有核心竞争力&#xff0c;会边缘化

基于ssm的数据结构课程网络学习平台的设计与实现论文

数据结构课程网络学习平台 摘要 本文介绍了数据结构课程网络学习平台的开发全过程。通过分析企业对于数据结构课程网络学习平台的需求&#xff0c;创建了一个计算机管理数据结构课程网络学习平台的方案。文章介绍了数据结构课程网络学习平台的系统分析部分&#xff0c;包括可行…

【elk-day01】es和kibana搭建及验证---Mac-Docker

Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker&#xff0c;因为docker作为工具使用&#xff0c;我们需要的是开箱即用&#xff0c;没有必…

【yolov5驾驶员和摩托车佩戴头盔的检测】

yolov5驾驶员和摩托车佩戴头盔的检测 数据集和模型yolov5驾驶员和摩托车佩戴头盔的检测yolov5驾驶员和摩托车佩戴头盔的检测可视化结果 数据集和模型 数据和模型下载&#xff1a; yolov5摩托车佩戴头盔和驾驶员检测模型 yolov5-6.0-helmat-mortor-1225.zipyolov3摩托车佩戴头…

Windows实现MySQL5.7主从复制(详细版)

使用免安装版本&#xff08;官网下载地址&#xff09; 在Windows上安装两种MySQL服务并同时开启服务 1.下载配置 打开解压文件所在位置&#xff0c;就新建一个配置文件my.ini。 2.主库安装 主库的my.ini配置文件如下&#xff1a; [mysqld] #设置主库端口&#xff0c;注意须是…

java 纯代码导出pdf合并单元格

java 纯代码导出pdf合并单元格 接上篇博客 java导出pdf&#xff08;纯代码实现&#xff09; 后有一部分猿友叫我提供一下源码&#xff0c;实际上我的源码已经贴在帖子上了&#xff0c;都是同样的步骤&#xff0c;只是加多一点设置就可以了。今天我再次上传一下相对情况比较完整…

ROS学习记录:如何在Github上寻找并安装软件包

一、打开网页输入www.github.com 二、进入github界面 三、打开一个终端&#xff0c;输入mkdir catkin_ws1建立一个工作空间 四、使用cd catkin_ws1进入工作空间 五、使用mkdir src创建一个子目录src就是source&#xff0c;原始资料的意思,指的就是程序源代码这类资源材料&#…

Android studio socket客户端应用设计

一、XML布局设计&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com…

利用网络教育系统构建个性化学习平台

在现代教育中&#xff0c;网络教育系统作为一种创新的学习方式&#xff0c;为学生提供了更加个性化和灵活的学习体验。在本文中&#xff0c;我们将通过简单的技术代码&#xff0c;演示如何构建一个基础的网络教育系统&#xff0c;为学生提供个性化的学习路径和资源。 1. 环境…

python3处理docx并flask显示

前言&#xff1a; 最近有需求处理docx文件&#xff0c;并讲内容显示到页面&#xff0c;对world进行在线的阅读&#xff0c;这样我这里就使用flaskDocument对docx文件进行处理并显示&#xff0c;下面直接上代码&#xff1a; Document处理&#xff1a; 首先下载Document的库文…

k8s二进制最终部署(网络 负载均衡和master高可用)

k8s中的通信模式 1、pod内部之间容器与容器之间的通信&#xff0c;在同一个pod 中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信&#xff0c;每个pod都有一个全局的真实的IP地址&a…