Flink On Kubernetes(四)Flink Kubernetes Operator Application模式

前面提到了Flink kubernetes Operator有4种部署方式。

可以参考这篇文章:https://blog.youkuaiyun.com/jwandbj/article/details/134603119?spm=1001.2014.3001.5502

所以我们这里直接使用Flink Kubernetes Operator的Application模式,通过把jar包挂载的方式进行部署。

一、jar包要挂载可以使用华为云的obs或者阿里云的oss,或者disk磁盘来挂载都可以;挂载的方式使用pvc,所以在执行flinkcdc-mysql-doris.yaml之前,还需要创建一个pvc:

#Flink 作业jar 持久化存储pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: flink-jar-pvc  # jar pvc名称
  namespace: flink
spec:
  storageClassName: csi-disk   #sc名称
  accessModes:
    - ReadWriteOnce   #采用ReadOnlyMany的访问模式
  resources:
    requests:
      storage: 1Gi    #存储容量,根据实际需要更改

二、创建好了挂载的pvc,还需要把checkpoint也用pvc挂载起来。如果没有设置checkpoint的存储地址,flink默认会把checkpoint的存储地址放到内存里面,这个时候就会出现一个问题,任务一开始是可以正常运行的,等运行到一定时候就会报错,从日志上看不出任务的问题。所以checkpoint也需要设置存储的地点,这里通过pvc挂载的方式来设置存储点,设置的这些pvc名称一定要和flinkcdc-mysql-doris.yaml文件里面的名称是一致的。

#Flink 作业jar 持久化存储pvc
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: flink-checkpoint-pvc  # jar pvc名称
  namespace: flink
spec:
  storageClassName: local-path   #sc名称
  accessModes:
    - ReadWriteOnce   #采用ReadOnlyMany的访问模式
  resources:
    requests:
      storage: 1Gi    #存储容量,根据实际需要更改

三、下面是执行的yaml文件:flinkcdc-mysql-doris.yaml,在Kubernetes的环境中,通过执行下面命令进行部署:

kubectl apply -f flinkcdc-mysql-doris.yaml -n 命名空间

flinkcdc-mysql-doris.yaml文件

apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  namespace: flink
  name: flinkcdc-mysql-doris
spec:
  image: flink:1.16.0  # 使用flink-sql的镜像
  flinkVersion: v1_16
  imagePullPolicy: IfNotPresent  # 镜像拉取策略,本地没有则从仓库拉取
  ingress:   # ingress配置,用于访问flink web页面
    template: "flink.ztorn.com/{{namespace}}/{{name}}(/|$)(.*)"
    className: "nginx"
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: "/$2"
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "1"
    state.checkpoints.dir: file:///opt/flink/checkpoints
    #classloader.resolve-order: parent-first  # 默认是child-first,必须改为parent-first,先加载flink自带的Jar,要不然容易出现各种类型不匹配问题
    jobmanager.memory.heap.size: 1024mb
    jobmanager.memory.jvm-metaspace.size: 384mb
    jobmanager.memory.off-heap.size: 256mb
    jobmanager.memory.jvm-overhead.min: 128mb
    jobmanager.memory.jvm-overhead.max: 896mb
    jobmanager.memory.jvm-overhead.fraction: "0.1"
    taskmanager.memory.task.heap.size: 2048mb  # 用于flink应用的算子和用户代码的JVM堆内存
    taskmanager.memory.managed.size: 256mb     # 由flink管理的用于排序、哈希表、缓存中间结果及Rocks DB State Backend的本地内存
    taskmanager.memory.task.off-heap.size: 256mb  # 用于flink应用的算子及用户代码的堆外内存
    taskmanager.memory.jvm-metaspace.size: 384mb  # Flink JVM进程的Metaspace
    taskmanager.memory.jvm-overhead.min: 256mb    # 用于其他JVM开销的本地内存,例如栈空间、垃圾回收空间
    taskmanager.memory.jvm-overhead.max: 2048mb
    taskmanager.memory.jvm-overhead.fraction: "0.1"
  serviceAccount: flink
  jobManager:
    resource:
      memory: "2024m"
      cpu: 1
  taskManager:
    resource:
      memory: "4096m"
      cpu: 2
  podTemplate:
    spec:
      nodeSelector:
        tag: bigdata
      containers:
        - name: flink-main-container
          env:
            - name: TZ
              value: Asia/Shanghai
          volumeMounts:
            - name: flink-obs  # 挂载nfs上的jar
              mountPath: /opt/flink/jar
              subPath: flink
            - name: flink-checkpoint-pvc  # 挂载checkpoint pvc
              mountPath: /opt/flink/checkpoints
              subPath: wh
      volumes:
        - name: flink-obs
          persistentVolumeClaim:
            claimName: flink-obs
        - name: flink-checkpoint-pvc
          persistentVolumeClaim:
            claimName: flink-checkpoint-pvc
  job:
    jarURI: local:///opt/flink/jar/xxx.jar # 使用pv方式挂载jar包
    entryClass: com.ztorn.ZtornApplication
    args:   # 传递到作业main方法的参数
      - "database"
      - "database\\.tablename"
      - "192.168.0.1"
      - "username"
      - "password"
      - "initial"
      - "1693462200"
      - "file:///opt/flink/checkpoints"
      
    parallelism: 1
    upgradeMode: stateless

### 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、付费专栏及课程。

余额充值