【梳理】k8s使用Operator搭建Flink集群(高可用可选)

文章目录

  • 1. 架构图
  • 2. helm 安装operator
  • 3. 集群知识
    • k8s上的两种模式:Native和Standalone
    • 两种CR
  • 4. 运行集群实例
    • Demo1:Application 集群
    • Demo2:Session集群
    • 优劣
  • 5. 高可用部署
    • 问题1:High availability should be enabled when starting standby JobManagers
    • 问题2:The base directory of the JobResultStore isn't accessible
  • 6. 补充

1. 架构图

请添加图片描述

参考:部署验证demo

2. helm 安装operator

安装cert-manager依赖
Jetstack/cert-manager 是 Kubernetes 生态系统中的一款开源项目,它提供了一种自动化的方式来管理 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

可以使用部署规范中的 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,执行器和逻辑代码打包成一个jar,直接运行,运行即结束。

# 此crd创建后,operator会创建:
# 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.17flinkVersion: v1_17flinkConfiguration:taskmanager.numberOfTaskSlots: "2"serviceAccount: flinkjobManager:resource:memory: "2048m"cpu: 1taskManager:resource:memory: "2048m"cpu: 1job:jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jarparallelism: 2upgradeMode: stateless

注:k8s不支持Job集群,可以看做是 Flink Application 集群”客户端运行“的替代方案。集群管理器为每个提交的作业启动一个集群。

Demo2:Session集群

多租户,多个job,每个sessionjob代表一个job,有提交jar包的功能。
Session使用与Application 集群类似的规范,唯一的区别是 job 未定义。

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:name: basic-session-deployment-example
spec:image: flink:1.17flinkVersion: v1_17jobManager:resource:memory: "2048m"cpu: 1taskManager:resource:memory: "2048m"cpu: 1serviceAccount: flink
---
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:name: basic-session-job-example
spec:deploymentName: basic-session-deployment-examplejob: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.jarparallelism: 4upgradeMode: stateless---
apiVersion: flink.apache.org/v1beta1
kind: FlinkSessionJob
metadata:name: basic-session-job-example2
spec:deploymentName: basic-session-deployment-examplejob: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.jarparallelism: 2upgradeMode: statelessentryClass: org.apache.flink.streaming.examples.statemachine.StateMachineExample

注:为了方便访问,可以再创建ingress。svc端口默认为8081,指向svc-rest即可。

优劣

  • Session集群,是常规的共享方式。
  • Application集群,提供了更好的隔离,生命周期与程序逻辑有关。
  • Job集群,适合长期运行、要求高稳定性的大型作业。(启动慢)

5. 高可用部署

Flink 提供了两种高可用服务实现:

  • ZooKeeper:每个 Flink 集群部署都可以使用 ZooKeeper HA 服务。它们需要一个运行的 ZooKeeper 复制组(quorum)。
  • Kubernetes:Kubernetes HA 服务只能运行在 Kubernetes 上。
    注:Flink 持久化元数据和 job 组件,直到作业执行成功、被取消或最终失败,再删除。

我在实践时,遇到两个问题:

问题1:High availability should be enabled when starting standby JobManagers

直接增加jobManager的副本数提示上述错误,要先做选举配置,我选择的是k8s实现,下面仅列出修改部分,注意flinkConfigurationpodTemplate两部分:

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
spec:flinkConfiguration:high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactoryhigh-availability.storageDir: file:///flink-data/haweb.upload.dir: /flink-data  #会自动创建flink-web-upload目录保存上传的jar包jobManager:replicas: 2taskManager:replicas: 2podTemplate:spec:containers:- name: flink-main-containervolumeMounts:- mountPath: /flink-dataname: flink-volumevolumes:- name: flink-volumepersistentVolumeClaim:claimName: flink-ha

问题2:The base directory of the JobResultStore isn’t accessible

如果没有正确挂载存储卷提示上述错误。
官方demo配置的卷是宿主机的路径,如下:

      volumes:- name: flink-volumehostPath:path: /tmp/flink  # 如果宿主机上没有这个路径会报错type: Director

6. 补充

  1. 拉取国外镜像比较困难,可以使用https://dockerproxy.com/
  2. 搭建多租户PaaS平台,可以使用Session方式,新任务可以通过CR进行管理,也可以由页面添加jar包。
  3. 本文内容来源于Flink官网,进行翻译、简化、整理,供大家参考~

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

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

相关文章

3.1_2 覆盖与交换

3.1_2 覆盖与交换 (一)覆盖技术 早期的计算机内存很小,比如IBM 推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。 后来人们引入了覆盖技术,用来解决“程序大小超过物理内存总和”的问题。 覆盖技术的…

DevOps-Jenkins-CI持续集成操作

创建项目 创建个web项目 我这里直接用Spring Web自动生成的demos 启动项目,访问展示如下默认页面信息 项目新增Docker构建配置 在项目下新建docker目录,新增Dockerfile、docker-compose.yml文件 Dockerfile文件,将mytest.jar 复制到容器的…

3/11Redis学习下

6.他们之间有什么优缺点 RDB 优点:1.使用二进制压缩包文件,内容更小。2.容量小,启动速度快 缺点:实时性较差,会出现数据丢失的问题,版本不兼容,老的redis可能不支持rdb文件 AOF: 优点&…

移动硬盘无法读取怎么修复?分享三个简单方法

移动硬盘作为现代数据存储的重要工具,一旦出现故障,往往会让我们感到焦虑和困惑。当移动硬盘无法读取时,我们需要冷静分析并采取适当的措施来修复它。本文将为您介绍三种有效的修复方法。 一、检查物理连接与驱动程序 当移动硬盘无法读取时&…

LiveGBS流媒体服务器中海康摄像头GB28181公网语音对讲、语音喊话的配置

LiveGBS海康摄像头国标语音对讲大华摄像头国标语音对讲GB28181语音对讲需要的设备及服务准备 1、背景2、准备2.1、服务端必备条件(注意)2.2、准备语音对讲设备2.2.1、不支持跨网对讲示例2.2.2、 支持跨网对讲示例 3、开启音频开始对讲4、搭建GB28181视频…

动手学深度学习-注意力机制Transformer

注意力机制 1. 注意力提示 1.1. 生物学中的注意力提示 **自主性提示(随意线索):收到认知和意识的控制,有主观意愿的推动。**如下图,所有纸制品都是黑白印刷的,但咖啡杯是红色的。 换句话说,这…

Java模板方法模式源码剖析及使用场景

一、原理与通俗理解 模板方法模式定义了一个算法的骨架,将某些步骤推迟到子类中实现。模板方法定义一个算法的骨架,将一些步骤的实现延迟到子类中完成。这样做的目的是确保算法的结构保持不变,同时又可以为不同的子类提供特定步骤的实现。 比如去餐馆吃饭,餐馆有固定的流程(下…

关于Mac宿主机无法ping通Docker容器的问题

https://www.cnblogs.com/luo-c/p/15830769.html 1.首先 Mac 端通过 brew 安装 docker-connector brew install wenjunxiao/brew/docker-connector 2.手动修改 /usr/local/etc/docker-connector.conf 文件中的路由(也可使用博客中的命令自动配置)&#…

C++switch语句

1.晶晶赴约会 晶晶的朋友贝贝约晶晶下周一起取看展览,但晶晶每周的一,三,五有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES,如果不能输入NO 输入 一行,贝贝邀请晶晶去看展览的日期,用数字1~7表示从星期一到星期日 输出 一行,若晶晶可以接受贝贝的邀…

【办公类-21-09】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体”

作品展示: 背景需求: 一、视频处理 1、育婴师培训的现场视频 2、下载视频,将视频换成考题名称 二、音频 视频用格式工厂转成MP3音频 3、转文字doc 把音频放入“网易云见外工作台”转换为“文字" 等待5分钟,音频文字会被写…

Redis入门--头歌实验初始redis

一、Redis中的数据结构 任务描述 本关任务:启动 Redis 客户端并创建一些值。 相关知识 为了完成本关任务,你需要掌握:1.Redis简介,2.快速安装Redis与Python,3.Redis数据结构简介。 R…

Python元组(Tuple)深度解析!

目录 1. 什么是元组? 2. 创建元组 3.访问元组 4.元组的运算 5.修改元组不可行 6.元组的应用场景 前面的博客里,我们详细介绍了列表(List)这一种数据类型,现在我们来讲讲与列表相似的一种数据类型,元组…

【Python】【Matplotlib】fig, ax = plt.subplots() 返回的fig和ax是什么?

【Python】【Matplotlib】fig, ax plt.subplots() 返回的fig和ax是什么? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&a…

求职干货!如何自信地进行自我介绍和面试问答!

面试在求职过程中扮演着至关重要的角色。它不仅是雇主评估候选人能力和适应性的关键环节,也是候选人展示自我、展示技能和经验的绝佳机会。通过面试,雇主可以更直接地了解候选人的沟通能力、解决问题的能力以及团队合作精神,这些都是成功工作…

ChatGPT GPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术

原文链接:ChatGPT GPT4科研应用、数据分析与机器学习、论文高效写作、AI绘图技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596849&idx3&sn111d68286f9752008bca95a5ec575bb3&chksmfa823ad6cdf5b3c0c446eceb5cf29cccc3161d746bdd9f2…

实例成员、静态成员

一、静态成员先于实例成员存在 类被加载到内存时,静态变量分配内存空间,静态方法分配入口地址 只有创建对象之后,实例变量分配内存空间,实例方法分配入口地址 当再创建对象时,实例方法不再分配入口地址,…

【Java从发入门到精通】Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 在使用 Stri…

蓝桥杯[OJ 3412]-最小化战斗力差距-CPP-贪心

目录 一、问题描述: 二、整体思路: 三、代码: 一、问题描述: 二、整体思路: 首先每个值都有可能为min(b),那么对于每个可能为min(b)的值,要使得max(a)尽可能小,因此枚举所有相差最…

【C/C++ API】C++内存分配和释放函数分析

文章目录 mallocrealloccallocmemalignposix_memalignfree参考 malloc malloc 是 C 标准库中的一个函数,用于动态分配内存。它的函数声明如下: void* malloc(size_t size);malloc 接受一个参数 size,表示要分配的内存块的大小(以…

设置文件描述符:FD_CLOEXEC(MAC OSX/LINUX)

FD_CLOEXEC是文件描述符标志,用于确保在执行exec调用时关闭文件描述符。当一个文件描述符被设置为FD_CLOEXEC标志时,这个文件描述符会在执行exec调用时自动关闭,这样可以防止在新程序中意外地继承和使用这些文件描述符。 这种特性对于在多进程…