首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Apache Flink快速入门-如何在Kubernetes 上部署 Flink

Apache Flink快速入门-如何在Kubernetes 上部署 Flink

作者头像
jack.yang
发布2025-04-05 17:30:59
发布2025-04-05 17:30:59
1.5K0
举报

Flink集群搭建

Kubernetes(k8s)由Google创建,现已成为最受欢迎的开源编排系统,用于管理多个主机容器化应用,提供了为分布式系统构建和部署可伸缩且可靠的应用程序所需的机制。我们正处在一个时代,服务的正常运行时间必须接近99.9%,要实现这一点,就必须拥有一种机制,即使存在系统崩溃,它们也不能失败。这些类型的系统必须具有某些特性,必须在某些意外发生的时候,工作负载可以在简单维护或部署的情况下进行扩展,停机时间必须为零。

Flink在k8s上支持的集群模式

可以使用会话集群或作业集群两种模式将Apache Flink部署在Kubernetes上。会话集群是一个运行中的独立集群,可以运行多个作业,Kubernetes的视角来看,会话集群由三个组件组成:

  • 指定JobManager的部署对象
  • 指定TaskManager的部署对象
  • 以及公开JobManager的REST API的Service对象

注意:Kubernetes 上的 Flink 不支持 Per-Job 集群模式。

关于Flink 集群模式请参阅

Apache Flin快速入门-部署前要了解内容

Yaml 配置

在Kubernetes上构建Flink Session Cluster,需要将Flink集群中的组件对应的Docker镜像分别在k8s集群中启动,其中包括JobManager、TaskManager、JobManagerServices三个镜像服务,其中每个镜像服务都可以从中央镜像仓库中获取,用户也可以构建本地的镜像仓库,针对每个组件所相应的Kubernetes的yaml配置如下:

JobManager Yaml 配置

主要提供运行JobManager组件镜像的参数配置,包括JobManager自身的参数,例如RPC端口等配置信息:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

代码语言:txt
复制
name: flink-jobmanager

spec:

代码语言:txt
复制
replicas: 1
代码语言:txt
复制
template:
代码语言:txt
复制
    metadata:
代码语言:txt
复制
        labels:
代码语言:txt
复制
            app: flink
代码语言:txt
复制
            component: jobmanager
代码语言:txt
复制
    spec:
代码语言:txt
复制
        containers:
代码语言:txt
复制
        - name: jobmanager
          image: flink:1.9
          args:
          - jobmanager
          ports:
          - containerPort: 6123
            name: rpc
          - containerPort: 6124
            name: blob
          - containerPort: 6125
            name: query
          - containerPort: 8081
            name: ui
          env:
          - name: JOB\_MANAGER\_RPC\_ADDRESS
            value: flink-jobmanager

TaskManager Yaml 配置

主要提供运行TaskManager组件的参数配置,以及TaskManager自身的参数,例如RPC端口等配置信息:

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

代码语言:txt
复制
name: flink-taskmanager

spec:

代码语言:txt
复制
replicas: 2
代码语言:txt
复制
template:
代码语言:txt
复制
    metadata:
代码语言:txt
复制
        labels:
代码语言:txt
复制
            app: flink
代码语言:txt
复制
            component: taskmanager
代码语言:txt
复制
    spec:
代码语言:txt
复制
        containers:
代码语言:txt
复制
        - name: taskmanager
          image: flink:1.9
          args:
          - taskmanager
          ports:
          - containerPort: 6121
            name: data
          - containerPort: 6122
            name: rpc
          - containerPort: 6125
            name: query
          env:
          - name: JOB\_MANAGER\_RPC\_ADDRESS
            value: flink-jobmanager

JobManagerServices 配置

主要为Flink Session 集群提供对外的RestApi和UI地址,使得用户可以通过Flink UI 的方式访问集群并获取任务和监控信息,配置文件如下:

apiVersion: v1

kind: Service

metadata:

代码语言:txt
复制
name: flink-jobmanager

spec:

代码语言:txt
复制
type: NodePort
代码语言:txt
复制
ports:
代码语言:txt
复制
- name: rpc
  port: 6123 
- name: blob
  port: 6124
- name: query
  port: 6125
- name: ui
  port: 8081
  nodePort: 30001
selector:
    app: flink
    component: jobmanager

启动Flink Session Cluster

当各个组件服务配置文件定义完毕后,就可以通过使用以下Kubectl命令,创建Flink Session Cluster,集群启动完成后就可以通过JobManagerServices中配置的WebUI端口访问 Flink Web 页面。

kubectl create -f jobmanager-service.yaml

kubectl create -f jobmanager-deployment.yaml

kubectl create -f taskmanager-deployment.yaml

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • Flink集群搭建
    • Flink在k8s上支持的集群模式
  • Apache Flin快速入门-部署前要了解内容
    • Yaml 配置
      • TaskManager Yaml 配置
      • JobManagerServices 配置
    • 启动Flink Session Cluster
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档