1. HDFS部署 (k8s)

hdfs的作用是用户保存flink的检查点与保持点
但是大数据集群目前还是建议单独使用CDH或者HDP部署
目前文中的这种hdfs on k8s方式做高可用不太方便

1.1 配置文件

hdfs-conf.yaml

apiVersion: v1
kind: ConfigMap
metadata:namespace: dev-flink-platname: kube-hadoop-conf
data:HDFS_MASTER_SERVICE: hadoop-hdfs-masterHDOOP_YARN_MASTER: hadoop-yarn-master

hdfs-service.yaml

apiVersion: v1
kind: Service
metadata:namespace: dev-flink-platname: hadoop-hdfs-master
spec:type: NodePortselector:app: hdfs-masterports:- name: rpcport: 9000targetPort: 9000- name: httpport: 50070targetPort: 50070nodePort: 32007

hdfs-namenode.yaml

没有配置secondary-namenode,而是通过ReplicationController的replicas来保证namenode的副本数

apiVersion: v1
kind: ReplicationController
metadata:namespace: dev-flink-platname: hdfs-masterlabels:app: hdfs-master
spec:replicas: 1selector:name: hdfs-mastertemplate:metadata:labels:name: hdfs-masterspec:containers:- name: hdfs-masterimage: kubeguide/hadoop:latestimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: namenode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always

hdfs-datanode.yaml

apiVersion: v1
kind: Pod
metadata:namespace: dev-flink-platname: hadoop-datanodelabels:app: hadoop-datanode
spec:containers:- name: hadoop-datanodeimage: kubeguide/hadoop:latestimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070    env:- name: HADOOP_NODE_TYPEvalue: datanode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTER        restartPolicy: Always

2. Flink部署 (k8s)

2.1 Flink部署方式

  1. flink standalone
  2. flink on yarn
  3. flink on k8s

我们采用的是flink on k8s的部署方式

2.2 flink on k8s 部署方案

Flink 选择 Kubernetes 的主要原因是结合 Flink 和 Kubernetes 的长稳性。
① Flink 特性:提供的实时服务是需要长时间、稳定地运行,常应用于电信网络质量监控、实时风控、实时推荐等稳定性要求较高的场景;
② Kubernetes 优势:为应用提供了部署、管理能力,同时保证其稳定运行。Kubernetes 具有很好的生态,可以集成各种运维工具,例如 prometheus、主流日志采集工具等。Kubernetes 具有很好的扩缩容机制,可以大大提高资源利用率。

Session 模式

预先构建 Flink 集群,且该集群长期处于运行状态,但不能自动扩缩容。用户通过 client 提交作业到运行中的 JobManager,而 JobManager 将任务分配到运行中的 TaskManager

优点 缺点
Flink 集群是预先启动运行的。用户提交作业的时候,作业可以立即分配到 TaskManager,即作业启动速度快 资源利用率低,提前确定 TaskManager 数量,如果作业需要的资源少,则大量 TaskManager 处于闲置状态。反正 TaskManager 资源不足
作业隔离性差,多个作业的任务存在资源竞争,相互影响。如果一个作业异常导致 TaskManager 挂了,该 TaskManager 上的全部作业都会被重启

Application 模式

每个作业独占一个 Flink 集群,当作业完成后,集群也会被回收。

注意:
① Flink 镜像需要包含作业即Application 依赖的 Class
② 启动作业的时候需要指定 Main 函数入口类

优点 缺点
一个作业独占一个集群,作业的隔离性好 资源利用率低,提前确定 TaskManager 数量,如果作业需要的资源少,则大量 TaskManager 处于闲置状态。反之 TaskManager 资源不足。同时,JobManager 不能复用

Flink Native Session 模式

类似 Session 模式,需要预先构建 JobManager。不同点是用户通过 Flink Client 向 JobManager 提交作业后,根据作业需要的 Slot 数量,JobManager 直接向 Kubernetes 申请 TaskManager 资源,最后把作业提交到 TaskManager 上。

优点 缺点
TaskManager 的资源是实时的、按需进行的创建,对资源的利用率更高 作业真正运行起来的时间较长,因为需要等待 TaskManager 创建

Flink Native Application 模式

类似 Application 模式,每个作业独占一个 Flink 集群,当作业完成后,集群也会被回收。不同点是 Native 特性,即 Flink 直接与 Kubernetes 进行通信并按需申请资源,无需用户指定 TaskManager 资源的数量。

优点 缺点
一个作业独占一个集群,作业的隔离性好 一个作业独占一个集群,JobManager 不能复用
资源利用率相对较高,按需申请 JobManager 和 TaskManager 作业启动较慢,在作业提交后,才开始创建 JobManager 和 TaskManager

运行模式总结

模式 隔离性 作业启动时间 资源利用率 资源按需创建
Session 弱,作业共享集群 较短,立即启动 较低,集群长期存在
Application 强,作业独享集群 最长,等待集群创建完成 一般,作业结束后释放资源
Native Session 弱,作业共享集群 一般,等待 TaskManager 创建 较低,TaskManager 按需申请
Native Application 强,作业独占集群 一般, 等待集群创建完成 最好,集群按需创建

Kubernetes 高可用 Services

Session 模式和 Application 模式集群都支持使用 Kubernetes 高可用服务。需要在 flink-configuration-configmap.yaml 中添加如下 Flink 配置项。

Note 配置了 HA 存储目录相对应的文件系统必须在运行时可用。请参阅自定义Flink 镜像和启用文件系统插件获取更多相关信息。

apiVersion: v1
kind: ConfigMap
metadata:name: flink-configlabels:app: flink
data:flink-conf.yaml: |+...kubernetes.cluster-id: <cluster-id>high-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactoryhigh-availability.storageDir: hdfs:///flink/recoveryrestart-strategy: fixed-delayrestart-strategy.fixed-delay.attempts: 10...

此外,你必须使用具有创建、编辑、删除 ConfigMap 权限的 service 账号启动 JobManager 和 TaskManager pod。请查看如何为 pod 配置 service 账号获取更多信息。

当启用了高可用,Flink 会使用自己的 HA 服务进行服务发现。因此,JobManager Pod 会使用 IP 地址而不是 Kubernetes 的 service 名称来作为 jobmanager.rpc.address 的配置项启动。

2.3 配置文件

flink-conf.yaml

apiVersion: v1
kind: ConfigMap
metadata:name: flink-confignamespace: fat-bigdata-clusterlabels:app: flink
data:flink-conf.yaml: |+jobmanager.rpc.address: flink-jobmanagertaskmanager.numberOfTaskSlots: 50blob.server.port: 6124jobmanager.rpc.port: 6123taskmanager.rpc.port: 6122jobmanager.heap.size: 1524mtaskmanager.memory.process.size: 4096mexecution.target: kubernetes-sessionstate.backend: filesystemstate.checkpoints.dir: hdfs://192.168.5.131:25305/flink/cpstate.savepoints.dir: hdfs://192.168.5.131:25305/flink/spstate.backend.incremental: truekubernetes.cluster-id: fat-bigdata-cluster-k8s-idclassloader.resolve-order: parent-firsthigh-availability: org.apache.flink.kubernetes.highavailability.KubernetesHaServicesFactoryhigh-availability.storageDir: hdfs://192.168.5.131:25305/flink/recovery#restart-strategy: fixed-delay#restart-strategy.fixed-delay.attempts: 10#high-availability.jobmanager.port: 34560#metrics.internal.query-service.port: 34561kubernetes.namespace: fat-bigdata-clusterkubernetes.service-account: flink-bigdata-clusterlog4j.properties: |+log4j.rootLogger=INFO, filelog4j.logger.akka=INFOlog4j.logger.org.apache.kafka=INFOlog4j.logger.org.apache.hadoop=INFOlog4j.logger.org.apache.zookeeper=INFOlog4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.file=${log.file}log4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %-60c %x - %m%nlog4j.logger.org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline=ERROR, file

jobmanager-service.yaml

apiVersion: v1
kind: Service
metadata:namespace: fat-bigdata-clustername: flink-jobmanager
spec:type: ClusterIPports:- name: rpcport: 6123- name: blobport: 6124- name: uiport: 8081selector:app: flinkcomponent: jobmanager

jobmanager-rest-service.yaml

apiVersion: v1
kind: Service
metadata:namespace: dev-flink-platname: flink-jobmanager-rest
spec:type: NodePortports:- name: restport: 8081targetPort: 8081nodePort: 30081selector:app: flinkcomponent: jobmanager

jobmanager-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:namespace: fat-bigdata-clustername: flink-jobmanager
spec:replicas: 1selector:matchLabels:app: flinkcomponent: jobmanagertemplate:metadata:labels:app: flinkcomponent: jobmanagerspec:containers:- name: jobmanagerimage: flink:1.13.2env:- name: FLINK_PROPERTIESvalue: 'jobmanager.rpc.address: flink-jobmanager'workingDir: /opt/flinkcommand: ["/bin/bash", "-c", "$FLINK_HOME/bin/jobmanager.sh start;\while :;doif [[ -f $(find log -name '*jobmanager*.log' -print -quit) ]];then tail -f -n +1 log/*jobmanager*.log;fi;done"]ports:- containerPort: 6123name: rpc- containerPort: 6124name: blob- containerPort: 8081name: uilivenessProbe:tcpSocket:port: 6123initialDelaySeconds: 30periodSeconds: 60volumeMounts:
#        - name: flink-config-volume
#          mountPath: /opt/flink/conf/- name: flink-lib-volumemountPath: /opt/flink/lib/securityContext:runAsUser: 9999  # refers to user _flink_ from official flink image, change if necessaryvolumes:
#      - name: flink-config-volume
#        configMap:
#          name: flink-config
#          items:
#          - key: flink-conf.yaml
#            path: flink-conf.yaml
#          - key: log4j.properties
#            path: log4j.properties- name: flink-lib-volumehostPath:path: /home/sll/lib/type: Directory

taskmanager-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:namespace: fat-bigdata-clustername: flink-taskmanager
spec:replicas: 1selector:matchLabels:app: flinkcomponent: taskmanagertemplate:metadata:labels:app: flinkcomponent: taskmanagerspec:containers:- name: taskmanagerimage: flink:1.13.2workingDir: /opt/flinkcommand: ["/bin/bash", "-c", "$FLINK_HOME/bin/taskmanager.sh start; \while :;doif [[ -f $(find log -name '*taskmanager*.log' -print -quit) ]];then tail -f -n +1 log/*taskmanager*.log;fi;done"]ports:- containerPort: 6122name: rpclivenessProbe:tcpSocket:port: 6122initialDelaySeconds: 30periodSeconds: 60volumeMounts:- name: flink-config-volumemountPath: /opt/flink/conf/- name: flink-lib-volumemountPath: /opt/flink/lib/securityContext:runAsUser: 9999  # refers to user _flink_ from official flink image, change if necessaryvolumes:- name: flink-config-volumeconfigMap:name: flink-configitems:- key: flink-conf.yamlpath: flink-conf.yaml- key: log4j.propertiespath: log4j.properties- name: flink-lib-volumehostPath:path: /home/sll/libtype: Directory

serviceaccount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:name: fat-bigdata-clusternamespace: fat-bigdata-cluster
automountServiceAccountToken: false

configmaps-cluster-role.yaml

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:namespace: fat-bigdata-clustername: configmaps-reader
rules:- apiGroups: [""]resources: ["configmaps"]verbs: ["update","create","get", "watch", "list"]

绑定clusterRole与serviceaccount

k create clusterrolebinding flink-reader-binding --clusterrole=configmaps-reader --serviceaccount=fat-bigdata-cluster:default

【Flink】flink on k8s 部署方案相关推荐

  1. flink on k8s部署方案实践--详细步骤

    背景 Flink-operator极大的方便了我们管理 Flink 集群及其作业,我们只需要自定义yaml文件就可以做到. Flink 官方还未给出 flink-operator 方案,不过 Goog ...

  2. flink on k8s部署方案调研

    背景 flink是目前最常用的大数据流计算处理引擎,一共有local,standalone,yarn,kubernetes四种安装部署机构方案.通常使用yarn进行管理,随着k8s云计算体系越来越成熟 ...

  3. 【Flink系列】部署篇(三):Native k8s部署高可用Flink集群实战

    上一篇博文介绍了如何独立部署一个高可用的Flink集群,本篇介绍如何用Native k8s去部署高可用的Flink 集群.本篇介绍的集群构建在AWS上,和构建在自己的服务器相比,主要区别在文件系统的选 ...

  4. Flink JobManager HA模式部署(基于Standalone)

    参考文章:https://ci.apache.org/projects/flink/flink-docs-release-1.3/setup/jobmanager_high_availability. ...

  5. flink yarn模式HA部署

    文章目录 1.yarn cluster 模式部署介绍 2.flink session HA模式 3.flink-per-job模式 该文章基于上一篇: Flink的local和standalone H ...

  6. Flink (四) Flink 的安装和部署- Flink on Yarn 模式 / 集群HA / 并行度和Slot

    接上一篇 Flink (三) Flink 的安装和部署- -Standalone模式 3. Flink  提交到 Yarn Flink on Yarn 模式的原理是依靠 YARN 来调度 Flink ...

  7. Flink Standalone 集群部署

    Flink 支持使用多种部署模式来满足不同规模应用的需求,常见的有单机模式,Standalone Cluster 模式,同时 Flink 也支持部署在其他第三方平台上,如 YARN,Mesos,Doc ...

  8. Nacos集群部署方案

    1. 介绍 生产环境部署nacos使用集群部署方案cluster来保障高可用 2. 集群部署架构图 nacos官方推荐把所有服务列表放到VIP下面,然后挂到一个域名下面 http://ip1:port ...

  9. Nacos生产环境集群部署方案

    1.介绍 生产环境中部署nacos首先肯定是使用集群模式cluster保证高可用. 2.集群部署架构图 nacos 官方推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面 http://i ...

最新文章

  1. mysql中的时间函数---运维常用
  2. 51Nod 1439 - 互质对(容斥+莫比乌斯函数)
  3. 分布式缓存 - hash环/一致性hash
  4. php中nodethirtythree,node常用模块 - LinearLaw的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. WebStorm文件类型关联设置
  6. 双纵坐标的绘图命令_Matplotlib绘图 | 快速定义图表样式的小技巧
  7. php中访问控制_PHP之Trait详解
  8. jsp页面将数据导出到Excel
  9. re模块常用修饰符_re模块中常用功能函数
  10. 论文笔记_S2D.27_2006-NIPS-从单目图像学习深度
  11. pytest allure测试报告_pytest文档32allure描述用例详细讲解
  12. python问卷星微信登录_使用Python自动填写问卷星(pyppeteer反爬虫版)
  13. vba字典学习案例二
  14. Git commit --amend
  15. 日本麻将中的牌型名称,充满格调与文艺
  16. 学习路之Linux--获取root权限
  17. 工作就是这么简单——去哪儿网CTO吴永强
  18. linux中test命令详解
  19. 不小心合并了icloud通讯录_iCloud合并通讯录没了如何恢复?最简单的技巧分析
  20. HBase进化之从NoSQL到NewSQL,凤凰涅槃成就Phoenix 1

热门文章

  1. KALI Linux三种安装方式之U盘安装
  2. uni-app小程序里用echarts-for-wx-uniapp,dispatchAction不起作用
  3. 首批+唯一。阿里云实时计算 Flink 版通过信通院大数据产品稳定性测试
  4. 计算机导论基于计算思维答案,基于计算思维的计算机导论课程改革实践.PDF
  5. 如何解决计算机黑屏问题,电脑黑屏不显示怎么办?不花钱就能解决的方法,分分钟教会你!...
  6. DOMBOM移动端事件jQuery
  7. [益智]:蚂蚁走树枝
  8. ESRI Shapefile格式解析
  9. HackRF 代码讲解 (一)
  10. 代理--ip池的使用--阿布云的使用