Flink Kubernetes Operator 介绍

一、简介

Flink Kubernetes Operator是针对在Kubernetes上运行Apache Flink应用程序而设计的工具。它充分利用了Kubernetes的优势,实现了对Flink集群的弹性管理和自动化操作,通过扩展Kubernetes API的方式,提供了管理和操作Flink部署的功能。

图片

二、优缺点

优点:

1.部署和监控 Flink 应用程序和会话部署:Flink Kubernetes Operator 允许用户在 Kubernetes 集群中轻松部署和监控 Flink 应用程序。它支持会话模式部署,允许多个 Flink 作业共享相同的 Flink 集群,优化资源使用并简化管理。

2.升级、挂起和删除部署:用户可以方便地升级 Flink 应用程序,无需中断当前作业。同时,Flink Kubernetes Operator 也支持暂停或删除部署,提供灵活的管理选项以适应不同的运维需求。

3.完整的日志记录和度量集成:它提供了强大的日志记录和监控功能,使运维团队能够实时监控 Flink 应用程序的性能和状态。这些日志和度量信息可以与 Kubernetes 的监控工具集成,方便进行性能分析和故障排查。

4.灵活的部署和与 Kubernetes 工具的本地集成:Flink Kubernetes Operator 支持灵活的部署策略,允许用户根据需求定制 Flink 应用程序的部署。此外,由于它是专为 Kubernetes 设计的,因此与 Kubernetes 的原生工具和生态系统(如 Helm)集成得非常紧密,进一步增强了用户的部署和管理体验。

缺点:

1.兼容的版本有限:目前支持的 Flink版本有:1.13、1.14、1.15、1.16、1.17和1.18。

2.灵活性不够高:目前还不能完全自动扩展或缩减资源。

3.用户体量较少,未知的 bug 较多:目前是 apache flink 出来的一个子项目,大部分企业都还是在使用 fink native kubernetes 管理,或者自己二次开发了 Flink Kubernetes Operator,但没有完全贡献到社区。

三、组件

Flink Kubernetes Operator的组件主要包括以下几个部分:

Operator控制器: 这是Flink Kubernetes Operator的核心组件,负责监听Kubernetes API中的Flink集群和作业定义,并根据这些定义执行相应的操作。它管理着Flink集群的生命周期,包括集群的创建、更新、删除等操作。

自定义资源(Custom Resource): 用户可以通过自定义资源定义Flink集群和作业的配置。这些资源描述了Flink集群的规格、资源需求、作业的配置等信息。Operator会根据这些自定义资源的定义来创建和管理Flink集群。


资源控制器(Resource Controller): 资源控制器负责管理Flink集群的计算资源。它会根据集群的需求动态调整TaskManager的数量和配置,以确保集群能够高效地处理作业负载。


作业管理器(Job Manager): 作业管理器是Flink集群的中心组件,负责作业的调度和管理。它会接收用户提交的作业,并根据集群的资源状况进行作业的调度和执行。作业管理器还提供作业的监控和故障恢复功能。

任务管理器(Task Manager): 任务管理器是Flink集群的计算节点,负责执行具体的计算任务。它会接收作业管理器分配的任务,并在本地执行计算操作。任务管理器会将计算结果返回给作业管理器,并在需要时与其他任务管理器进行数据传输和通信。

存储卷(Storage Volumes): Flink Kubernetes Operator使用Kubernetes的存储卷来持久化Flink集群的状态和数据。这些存储卷可以是持久化存储卷或临时存储卷,具体取决于用户的需求和配置。

监控与日志系统: Flink Kubernetes Operator可以集成Kubernetes的监控和日志系统,这些系统可以提供实时监控和日志收集功能,帮助用户了解Flink集群和作业的运行状态,并进行故障排除和性能优化。

四、部署作业流程

用户使用Kubernetes命令行工具kubectl与Flink Operator进行交互。Operator将会持续追踪与FlinkDeploymenty与FlinkSessionJob自定义资源相关的部署事件,同时通过Operator内部的一个观察把状态返回给用户。

图片

Operator由以下步骤组成:

1.用户使用提交FlinkDeployment自定义资源(CR)并提交到Operator上。

2.Operator启动Flink集群部署,应创建UI访问的ingress规则,与此同时创建JobManager和TaskManager并提交Flink作业。

3.可以随时在集群上(重新)应用部署。Operator不断调整以模仿期望的状态,直到当前状态变为用户期望状态,这个过程称为reconcile,是一个持续进行的循环。

五、工作流程

Flink Kubernetes Operator的工作流程大致可以分为以下几个步骤:

1.资源定义:

用户通过定义Flink CR资源,如Flink Application或Flink Session Cluster,来描述他们希望部署的Flink集群的配置。

2.资源提交:

用户将CR资源提交到Kubernetes集群。

3.Operator响应:

Flink Kubernetes Operator监测到CR资源的提交,开始执行相应的操作。

4.集群部署与管理:

Operator根据CR的定义,部署Flink集群,JobManager节点和TaskManager节点。

Operator还负责监控集群状态,处理故障恢复,进行升级和缩放等操作。

5.状态更新与反馈:

Operator将集群的实时状态更新到CR的状态字段中,用户可以通过查询CR的状态来获取集群的运行情况。

六、安装与使用

环境准备,需要安装docker、k8s集群、 heml

安装operator

get https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml

kubectl create -f cert-manager.yaml

图片

查看pod是否正常运行

kubectl get pods -A |grep cert-manager

图片

elm repo add flink-operator-repo
https://downloads.apache.org/flink/flink-kubernetes-operator-1.6.1/

helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator

图片

查看pod是否正常

kubectl get pods -A |grep flink-kubernetes-operator

图片

Operator启动完成后,可以提交flink作业了,这里使用官方的资源文件basic.yaml,其内容如下:

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment    
metadata:
  name: basic-example
spec:
  image: flink:1.15
  flinkVersion: v1_15
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
    parallelism: 2
upgradeMode: stateless

提交作业

kubectl create -f basic.yaml

查看作业是否启动

kubectl get pods -A |grep basic

图片

如果需要打开flink web监控页面,需要暴露端口,命令如下

kubectl port-forward --address 0.0.0.0 svc/basic-example-rest 8081

图片

删除Flink作业

kubectl delete -f basic.yaml

七、结语

Flink Kubernetes Operator是一种强大而灵活的工具,简化了在Kubernetes上部署和管理Flink集群的复杂性,让开发人员和运维团队能够更专注于业务逻辑而非基础设施的细节。通过使用Operator,可以更轻松地管理Flink作业的生命周期,并根据负载的需求自动调整集群规模,使得在 Kubernetes 上运行 Flink 应用程序变得更加方便和可靠。

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

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

相关文章

探索设计模式的魅力:一篇文章让你彻底搞懂建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,旨在将一个复杂对象的创建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。 主要角色: 产品(Product):表示正在构建…

git提权

实验环境——vulnhub-dc2靶场 git提权 前提:用户可以使用sudo中git权限 查看sudo权限 sudo -l可以发现git命令存在sudo提权 基于此进行权限提升 方式: sudo git help config #在末行命令模式输入 !/bin/bash 或 !sh #完成提权 sudo git -p help…

海外问卷调查怎么做?

大家好,我是橙河老师,我自己做海外问卷项目已经2年时间了,一般来说互联网项目的生命周期都不会太长,但海外问卷项目是一个稳定长期可做的项目,只要消费市场一直存在,问卷调查的需求就不会消失,我…

DBA技术栈MongoDB:简介

1.1 什么是MongoDB? MongoDB是一个可扩展、开源、表结构自由、用C语言编写且面向文档的数据库,旨在为Web应用程序提供高性能、高可用性且易扩展的数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当…

深度学习记录--偏差/方差(bias/variance)

误差问题 拟合神经网络函数过程中会出现两种误差:偏差(bias)和方差(variance) 偏差和误差的区别 欠拟合(underfitting) 当偏差(bias)过大时,如左图,拟合图像存在部分不符合值,称为欠拟合(underfitting) 过拟合(overfitting) …

gitlab 部署项目新分支

公司代码管理平台新切换到gitlab下,上线发版流程随之变更 1新建分支,开发完成,提交新分支 2.去gitlab平台上找到Merge requests 3 点击右上角的New merge request select source branch 选择新建的分支 点击 compare branches and contin…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-热门标签推荐显示实现

锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…

Wayfair 开启2024年的裁员模式

周五的时候 Wayfair 的 CEO 公开信中表示,将削减 1650 个工作岗位。 通篇读下来的意思就是公司目前还是非常健康的状态,新冠导致的在线购物激增让 Wayfair 在短时间内的销售从 90 亿美元增加到 180 亿美元。 几乎是翻倍了,而且这个让 Wayfai…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-帖子详情页实现

锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…

Midjourney网页版

引言 基于国外的api开发开发了一款网页版的midjourney,文末有链接 相关资源 Midjourney官方教学资料Midjourney官网discord官网B站学习资源推荐 账号注册 获取网络访问权限 使用Midjourney的前提是计算机有外网访问权限 此处推荐两款软件,lantern的优势是免费&…

【正点原子STM32连载】 第四十五章 内存管理实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四…

Spring Security的使用条件

Spring Security要求使用Java 8或更高版本的运行时环境。 由于Spring Security旨在以自包含的方式运行,因此您无需在Java运行时环境中放置任何特殊的配置文件。特别是,您无需配置特殊的Java认证和授权服务(JAAS)策略文件&#xf…

仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】

文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎…

C++ memcpy函数学习以及和strcpy的不同

memcpy指的是C和C++使用的内存拷贝函数,函数原型为, void *memcpy(void *destin, void *source, unsigned n); 函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中。 // castdemo.cpp : Defines the entry p…

【PyTorch】PyTorch之Reduction Ops

文章目录 前言一、ARGMAX二、ARGMIN三、AMAX和AMIN四、ALL和ANY五、MAX和MIN六、MEAN七、MEDIAN八、NORM九、PROD十、STD十一、SUM十二、UNIQUE十三、VAR 前言 介绍pytorch的Reduction Ops。 一、ARGMAX torch.argmax(input, dim, keepdimFalse) → LongTensor Parameters&a…

掌握使用CXF快速开发webservice服务和生成client端技能

文章目录 前言1.安装和配置cxf环境2.创建一个通过maven管理的java项目并引入相关cxf依赖3.使用cxf提供的类编写webservice服务端并发布服务3.1 定义一个webservice服务接口HelloWorld3.2 编写HelloWorld实现类3.3 通过JaxWsServerFactoryBean发布webservice服务3.4 在浏览器中通…

游戏开发制作过程

游戏开发是一门结合艺术、技术和创意的复杂工艺。从一个简单的想法到一个完全实现的游戏,这个过程是多层次的,每一步都至关重要。在这篇文章中,我们将探索游戏开发的各个阶段,从概念化到最终发布。 游戏开发的第一步是将一个抽象的…

AI 编程的机会和未来:从 Copilot 到 Code Agent

大模型的快速发展带来了 AI 应用的井喷。统计 GPT 使用情况,编程远超其他成为落地最快、使用率最高的场景。如今,大量程序员已经习惯了在 AI 辅助下进行编程。数据显示,GitHub Copilot 将程序员工作效率提升了 55%,一些实验中 AI …

Java 读取 Excel 表格—— Easy Excel 基本使用

两种读对象的方式 确定表头&#xff1a;建立对象&#xff0c;和表头形成映射关系。不确定表头&#xff1a;每一行数据映射为 Map<String, Object>&#xff0c;比如用户自己上传的表格。 两种读取模式 监听器&#xff1a;先创建监听器、在读取文件时绑定监听器。单独抽…

vue2 使用pdf.js 实现pdf预览,并可复制文本

需求&#xff1a;pdf预览&#xff0c;并且可以选中pdf的内容进行复制。 在ruoyi的vue前端项目中用到&#xff0c;参考了网上不少文章&#xff0c;因为大部分没给具体的pdf.js版本&#xff0c;导致运行过程中报各种api 错误&#xff0c;经过尝试以下版本可用&#xff0c…