Flink2.0及Flink-operater在K8S上部署

news2025/12/15 4:10:43

1.查找镜像

dockerhub访问不了的可以访问这个查找镜像 https://docker.aityp.com/
在docker服务器上拉取flink镜像到本地

拉取镜像到你的docker服务器本地
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/flink:2.0.0-scala_2.12-java17
将docker服务器本地的镜像打上标签
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/apache/flink:2.0.0-scala_2.12-java17 10.31.68.12:5000/flink:2.0.0-scala_2.12-java17
将打好标签的镜像推送到docker服务器
docker push 10.31.68.12:5000/flink:2.0.0-scala_2.12-java17

做完之后docker镜像如下,后面需要镜像的地方就写它

10.31.68.12:5000/flink:2.0.0-scala_2.12-java17

2.安装Flink Kubernetes Operator

官网:https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/docs/try-flink-kubernetes-operator/quick-start/
安装证书以启用webhook组件

kubectl create -f https://github.com/jetstack/cert-manager/releases/download/v1.8.2/cert-manager.yaml

如果yaml下载不成功,去 https://gitee.com/MiraculousWarmHeart/file-share/blob/master/flink/cert-manager.yaml复制,太长了就不贴这了,下到你的服务器上比如/data/flink/这个路径,执行

kubectl create -f  /data/flink/cert-manager.yaml

部署稳定Flink Kubernetes Operator,依次执行

helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.11.0/
helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator

装完验证
执行 kubectl get pods 结果如下

NAME                                         READY   STATUS             RESTARTS         AGE
flink-kubernetes-operator-5c8975f64b-jdgc6   2/2     Running            0                81m

执行 helm list 结果如下

NAME                            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                                   APP VERSION
flink-kubernetes-operator       flink-prod      1               2025-05-28 15:08:00.683092663 +0800 CST deployed        flink-kubernetes-operator-1.11.0        1.11.0

3.存储卷及NFS配置(非必须,有配置好的就不用做)

3.1. 创建存储类(StorageClass)

kubectl create -f flink-storage.yaml 也可以在kuboard上创建

apiVersion: v1
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: flink-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
3.2. 创建 PV(PersistentVolume)

定义 NFS 类型的 PV,指定存储容量和访问模式:
kubectl create -f flink-trans-pv.yaml 也可以在kuboard上创建

apiVersion: v1
kind: PersistentVolume
metadata:
  name: flink-trans-pv
  namespace: flink-prod
spec:
  capacity:
    storage: 20Gi     # 存储容量
  accessModes:
    - ReadWriteMany   # 支持多节点读写
  storageClassName: nfs-flink
  nfs:
    server: 10.31.68.22      # NFS 服务器 IP
    path: "/data/flink"    # NFS 共享路径
  persistentVolumeReclaimPolicy: Retain  # 回收策略(保留数据)
3.3. 创建 PVC(PersistentVolumeClaim)

申领符合要求的 PV 资源:
kubectl create -f flink-trans-pvc.yaml 也可以在kuboard上创建

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: flink-trans-pvc
  namespace: flink-prod
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi    # 实际申请的容量(需 ≤ PV 配置)
  storageClassName: nfs-flink

4.提交flink作业

4.1上传jar到nfs目录

scp ekrPatentDataProcessFlink-1.0.0.jar root@10.31.68.22:/flink/jobs/
或者本地直接上传到nfs目录

4.2 部署应用
kubectl create -f  flink-kafka-trans.yaml

flink-kafka-trans.yaml内容如下

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: flink-kafka-trans
  namespace: flink-prod
spec:
  image: 10.31.68.12:5000/flink:2.0.0-scala_2.12-java17
  flinkVersion: v2_0
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  serviceAccount: flink
  podTemplate:
    spec:
     hostAliases:
     - ip: "10.31.68.21"
       hostnames:
       - "k8smaster"
     containers:
       - name: flink-main-container
         volumeMounts:
           - name: nfs-jar-volume      # 挂载 Jar 包存储
             mountPath: /data/flink
         resources:
           requests:
             memory: "2048Mi"
             cpu: "1000m"
           limits:
             memory: "2048Mi"
             cpu: "1000m"
     volumes:
       - name: nfs-jar-volume          # 关联 PVC
         persistentVolumeClaim:
           claimName: flink-trans-pvc   # 替换为你的 PVC 名称
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///data/flink/jobs/ekrPatentDataProcessFlink-1.0.0.jar  # 容器内挂载路径
    entryClass: net.cnki.ekr.transfer.EkrFlinkTransApplication
    args: []
    parallelism: 2
    upgradeMode: stateless

4.3 查看日志
kubectl logs -f deploy/flink-kafka-trans

5.转发暴露端口(非必须,日志载k8s容器中可以看)

指定映射端口
kubectl port-forward deployment/flink-kafka-trans 28081:8081
不指定映射端口,由kubectl来选择和分配本地端口
kubectl port-forward deployment/flink-kafka-trans :8081
或者kubectl port-forward service/flink-kafka-trans 28081:8081

访问http://10.31.68.21:28081

6.要停止作业并删除FlinkDeployment

kubectl delete flinkdeployment/flink-kafka-trans

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

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

相关文章

PH热榜 | 2025-06-03

1. Knowledge 标语:像认识朋友一样去销售给潜在客户,因为你其实了解他们! 介绍:Knowledge 是一个针对个人的销售智能平台,它利用行为数据和心理测评来识别市场上的潜在买家,并指导销售团队以最真实、最有…

论文略读: STREAMLINING REDUNDANT LAYERS TO COMPRESS LARGE LANGUAGE MODELS

2025 ICLR 判断模型层的重要性->剪去不重要的层(用轻量网络代替) 这种方法只减少了层数量,所以可以用常用的方法加载模型 层剪枝阶段 通过输入与输出的余弦相似度来判断各个层的重要性 具有高余弦相似度的层倾向于聚集在一起&#xff0c…

mapbox高阶,生成并加载等时图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️Fill面图层样式1.4 ☘️symbol符号图层…

DeepSeek眼中的文明印记:山海经

一、山海经到底是怎么回事? 《山海经》是中国古代一部极具神秘色彩的文化典籍,成书时间跨度较大(大致从战国至汉代),内容庞杂,涉及神话、地理、物产、巫术、医学、民俗等多个领域。关于它的性质&#xff0…

在Mathematica中实现Newton-Raphson迭代

为了寻找方程 可以使用Newton-Raphson迭代方法: NRIter[func_, xzero_, n_ : 5] :Module[{pointlist {}, x, xold xzero, xnew, f, df, xl, xr, k},f[x_] func[x];df[x_] D[func[x], x];Do[(pointlist Join[pointlist, {{xold, 0}}, {{xold, f[xold]}}];xnew …

【Ragflow】25.Ragflow-plus开发日志:excel文件解析新思路/公式解析适配

引言 RagflowPlus v0.3.0 版本中,增加了对excel文件的解析支持,但收到反馈,说效果并不佳。 以下测试文件内容来自群友反馈提供,数据已脱敏处理。 经系统解析后,分块效果如下: 可以看到,由于该…

Python数据可视化科技图表绘制系列教程(一)

目录 创建多个坐标图形(坐标系) 图表的组成 创建图形与子图 创建子图1 创建子图2 创建子图3 创建子图4 创建子图5 添加图表元素 极坐标图1 极坐标图2 【声明】:未经版权人书面许可,任何单位或个人不得以任何形式复制、…

移除3D对象的某些部分点云

1,目的 移除3D对象指定区域的点云。效果 2,原理。 通过投影剔除指定区域外的点云数据。 3,主要的算子。 3.1,gen_image_gray_ramp 是 Halcon 中用于生成‌线性灰度渐变图像‌的算子 功能概述‌ 数学原理‌ 生成的图像灰度值…

阿里云为何,一个邮箱绑定了两个账号

阿里云“幽灵账号”之谜:同一个邮箱注销后仍有两个账号?深度揭秘成因与终极解决方案! 你是否曾在阿里云上使用同一个邮箱注册过多个账号,明明已经**“彻底”注销了其中一个**,却惊愕地发现系统里依然**“幽灵般”挂着…

高效视频倍速播放插件推荐

软件介绍 本文介绍一款名为Global Speed的视频速度控制插件,该插件在插件市场评分极高,被公认为目前最好用的视频倍速插件之一。 插件安装与基本功能 安装Global Speed插件后,用户只需点击插件图标即可选择播放倍数,最高支持16…

无他相机:专业摄影,触手可及

在数字摄影时代,手机摄影已成为许多人记录生活、表达创意的重要方式。无他相机正是这样一款专为摄影爱好者设计的相机应用程序,它不仅提供了专业级摄影设备的大部分功能,还通过简洁直观的操作界面,让每一位用户都能轻松上手&#…

基于贝叶斯优化神经网络的光伏功率预测综述

基于贝叶斯优化神经网络的光伏功率预测综述 一、贝叶斯优化的基本原理与核心组件 贝叶斯优化(Bayesian Optimization, BO)是一种基于概率模型的全局优化方法,特别适用于高成本评估的黑盒函数优化问题。其核心由代理模型和采集函数构成&…

【C++11】折叠引用和完美转发

目录 一. 前言二. 引用折叠引用折叠的规则 三. 完美转发完美转发适用场景完美转发底层实现思考1思考2 一. 前言 在函数传参时,如果想保持某个参数的属性不改变,需要完美转发,而完美转发的实现需要折叠引用的帮助 二. 引用折叠 在语法上&am…

数据结构:递归:自然数之和

目录 递归解法 🔹第一步:定义本质问题 🔹第二步:分解问题结构 🔹第三步:定义初始条件 🔹第四步:递归思想的自然生成 循环解法 🔹第 1 步:定义问题最小…

网易 - 灵犀办公文档

一. 企业介绍 网易是中国领先的互联网技术公司,为用户提供免费邮箱、游戏、搜索引擎服务,通过开设新闻、娱乐、体育等30多个内容频道,以及博客、视频、论坛等互动交流,网聚人的力量。 为了给中小企业和个人打造一款综合性办公产…

【C++】模板与特化技术全面教程(claude sonnet 4)

第一章:模板的基础概念 (Template Fundamentals) 1.1 什么是模板? 模板 (Template) 是C中的一种泛型编程 (Generic Programming) 机制,它允许我们编写与类型无关的代码。想象一下,如果我们要为不同的数据类型编写相同逻辑的函数&a…

ABAP设计模式之---“高内聚,低耦合(High Cohesion Low Coupling)”

“高内聚、低耦合”是面向对象编程中非常重要的设计原则,它有助于提高代码的可维护性、扩展性和复用性。 1. 初衷:为什么会有这个原则? 在软件开发中,随着业务需求的复杂化,代码难免会变得越来越庞大。如果开发者将一…

RagFlow优化代码解析(一)

引子 前文写到RagFlow的环境搭建&推理测试,感兴趣的童鞋可以移步(RagFlow环境搭建&推理测试-CSDN博客)。前文也写过RagFLow参数配置&测试的文档,详见()。很少写关于具体代码的blog&#xff0c…

【python与生活】用 Python 从视频中提取音轨:一个实用脚本的开发与应用

在当今数字化的时代,视频内容无处不在。无论是学习教程、会议记录、在线讲座还是娱乐视频,我们每天都会接触到大量的视频资源。有时候,我们可能只对视频中的音频部分感兴趣,比如提取讲座的音频用于后续收听,或者从电影…

深度强化学习赋能城市消防优化,中科院团队提出DRL新方法破解设施配置难题

在城市建设与发展中,地理空间优化至关重要。从工业园区选址,到公共服务设施布局,它都发挥着关键作用。但传统求解方法存在诸多局限,如今,深度学习技术为其带来了新的转机。 近日,在中国地理学会地理模型与…