Flink on-k8s operator application 模式

本文详细介绍如何使用Flink Kubernetes Operator部署Flink作业,包括构建自定义Docker镜像、配置YAML文件及运行Flink应用的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flink-kubernetes-operator 官方文档中给出的 application 模式 demo

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  namespace: default
  name: basic-example
spec:
  image: flink:1.16
  flinkVersion: v1_16
  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
    state: running
  • 不难看出 application 模式 是使用local 方式管理flink jar 应用程序 (local:///opt/flink/examples/streaming/StateMachineExample.jar) 这就要求使用者自定义flink 镜像

Flink on-k8s operator 模式运行flink 使用dockerfile 方式进行构建

  • 在编写dockerfile 之前使用 docker images 看下是否拉取了flink 基础镜像 如果没有执行
  docker pull  flink:1.15.3-scala_2.12-java8

第一步: 编写dockerfile


FROM   flink:1.15.3-scala_2.12-java8
USER root

ENV FLINK_HOME=/opt/flink
ENV PATH=$FLINK_HOME/bin:$PATH

#flink添加到根目录

RUN   mkdir $FLINK_HOME/userlib
ADD  flink-cdc-demo-1.0-jar-with-dependencies.jar $FLINK_HOME/userlib

#设置code文件夹的工作目录
EXPOSE 6123 8081

  • 第二步:构建镜像到远程镜像仓库 (your_docker_repository_url 为镜像仓库地址 flink 为该仓库中的目录,flink_application 表示镜像名称)
    
    docker build -t   your_docker_repository_url/flink/flink_application . 
  • 第三步: 上传构建好的镜像到远程仓库
  docker push  your_docker_repository_url/flink/flink_application
  

编写application job

  • 通过image 标签来指定 自定义的flink 镜像
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: flink-application-1
  namespace: your_namespace
spec:
  mode: native
  image: www.abc.cn/flink/flink_application:1.15.3-scala_2.12-java8
  flinkVersion: v1_15
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "6"
    state.checkpoints.dir: file:///tmp/checkpoint
  serviceAccount: flink
  jobManager:
    resource:
      memory: "1024m"
      cpu: 1
  taskManager:
    resource:
      memory: "4096m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/userlib/flink-cdc-demo-1.0-jar-with-dependencies.jar
    parallelism: 1
    upgradeMode: stateless
    entryClass: MysqlSinkPulsar
    args: ["params1=xxxxxx","params2="]

最后运行application flink

    kubectl  apply -f  your_FlinkDeployment.yaml 
  • 备注: 亲测有效
### FlinkKubernetes上的部署和运行 #### 准备工作 为了成功地在Kubernetes上部署Flink,需先安装并配置好Kubernetes集群环境[^1]。这包括但不限于设置kubectl命令行工具以便能够与API服务器通信。 #### 安装Flink Operator 通过Helm Chart或YAML文件来安装Apache官方提供的Flink Operator,该组件负责管理Flink应用生命周期以及简化其操作流程。对于采用YAML方式进行安装的情况,可以执行如下命令: ```bash kubectl apply -f https://raw.githubusercontent.com/apache/flink-kubernetes-operator/release-1.1/deploy/kubernetes/flink-kubernetes-operator.yaml ``` 此过程会创建必要的自定义资源定义(CRD),并将控制器注入到目标命名空间内。 #### 创建ClusterRoleBinding 为了让Flink作业具有适当权限访问集群资源,在实际环境中通常还需要额外设定服务账号及其关联的角色绑定关系。例如下面这条指令用于授予特定用户组对整个集群范围内的读写控制权: ```bash kubectl create clusterrolebinding flink-role-binding-flink \ --clusterrole=edit \ --serviceaccount=default:default \ --namespace=default ``` 上述命令中的`default`应替换为具体的服务账户名称和服务所在的命名空间名[^2]。 #### 提交第一个Flink Job 一旦准备工作完成之后就可以提交首个测试任务了。这里推荐利用Session Cluster模式启动长期存在的入口点实例,再向其中上传jar包形式的应用程序逻辑代码片段;或者直接选用Application Mode一次性打包处理业务需求场景下的所有依赖项一起发送给调度器安排执行计划。 ```yaml apiVersion: flink.apache.org/v1beta1 kind: FlinkDeployment metadata: name: word-count spec: image: flink:latest job: jarURI: local:///opt/flink/examples/streaming/WordCount.jar parallelism: 1 serviceAccount: default ``` 这段清单描述了一个名为word-count的任务部署对象,指定了镜像版本号、待加载的JAR路径位置参数以及并发度级别等属性信息。将其保存成`.yaml`格式文本文件并通过`kubectl apply -f filename.yaml`的方式推送至apiserver端口监听地址处即可触发自动化构建动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值