ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FLINK基础(152): RUNTIME(4)Flink on Yarn/K8s 原理剖析及实践(3)Flink on Kubernetes 原理剖析

2021-09-02 21:02:44  阅读:164  来源: 互联网

标签:Flink Kubernetes flink JobManager 剖析 yaml deployment 原理


0 简介

  Kubernetes 是 Google 开 源 的 容 器 集 群 管 理 系 统, 其 提 供 应 用 部 署、 维护、扩展机制等功能,利用 Kubernetes 能方便地管理跨机器运行容器化的应用。Kubernetes 和 Yarn 相比,相当于下一代的资源管理系统,但是它的能力远远不止这些。

1 Kubernetes- 基本概念

  Kubernetes(k8s)中的 Master 节点,负责管理整个集群,含有一个集群的资源数据访问入口,还包含一个 Etcd 高可用键值存储服务。Master 中运行着 APIServer,Controller Manager 及 Scheduler 服务。   Node 为集群的一个操作单元,是 Pod 运行的宿主机。Node 节点里包含一个agent 进程,能够维护和管理该 Node 上的所有容器的创建、启停等。Node 还含有一个服务端 kube-proxy,用于服务发现、反向代理和负载均衡。Node 底层含有docker engine,docker 引擎主要负责本机容器的创建和管理工作。   Pod 运行于 Node 节点上,是若干相关容器的组合。在 K8s 里面 Pod 是创建、调度和管理的最小单位。

2 Kubernetes- 架构图

Kubernetes 的架构如图所示,从这个图里面能看出 Kubernetes 的整个运行过程。   ●API Server 相当于用户的一个请求入口,用户可以提交命令给 Etcd,这时会将这些请求存储到 Etcd 里面去。   ●Etcd 是一个键值存储,负责将任务分配给具体的机器,在每个节点上的Kubelet 会找到对应的 container 在本机上运行。   ●用户可以提交一个 Replication Controller 资源描述,Replication Controller会监视集群中的容器并保持数量;用户也可以提交 service 描述文件,并由kube proxy 负责具体工作的流量转发。  

3 Kubernetes- 核心概念

Kubernetes 中比较重要的概念有:   ●Replication Controller (RC) 用 来 管 理 Pod 的 副 本。RC 确 保 任 何 时 候Kubernetes 集群中有指定数量的 pod 副本 (replicas) 在运行, 如果少于指定数量的 pod 副本,RC 会启动新的 Container,反之会杀死多余的以保证数量不变。   ●Service 提供了一个统一的服务访问入口以及服务代理和发现机制   ●Persistent Volume(PV) 和 Persistent Volume Claim(PVC) 用于数据的持久化存储。   ●ConfigMap 是指存储用户程序的配置文件,其后端存储是基于 Etcd。

4 Flink on Kubernetes- 架构

  Flink on Kubernetes 的架构如图所示,Flink 任务在 Kubernetes 上运行的步骤有:   ●首先往 Kubernetes 集群提交了资源描述文件后,会启动 Master 和 Worker的 container。   ●Master Container 中会启动 Flink Master Process,包含 Flink-ContainerResourceManager、JobManager 和 Program Runner。   ●Worker Container 会 启 动 TaskManager, 并 向 负 责 资 源 管 理 的 ResourceManager 进行注册,注册完成之后,由 JobManager 将具体的任务分给 Container,再由 Container 去执行。   ●需要说明的是,在 Flink 里的 Master 和 Worker 都是一个镜像,只是脚本的命令不一样,通过参数来选择启动 master 还是启动 Worker。

4.1 Flink on Kubernetes-JobManager

JobManager 的执行过程分为两步 : ●首先,JobManager 通过 Deployment 进行描述,保证 1 个副本的 Container 运行 JobManager,可以定义一个标签,例如 flink-jobmanager。 ●其次,还需要定义一个 JobManager Service,通过 service name 和 port暴露 JobManager 服务,通过标签选择对应的 pods。

4.2 Flink on Kubernetes-TaskManager

  TaskManager 也是通过 Deployment 来进行描述,保证 n 个副本的 Container 运行 TaskManager,同时也需要定义一个标签,例如 flink-taskmanager。   对于 JobManager 和 TaskManager 运行过程中需要的一些配置文件,如:flink-conf.yaml、hdfs-site.xml、core-site.xml,可以通过将它们定义为 Config-Map 来实现配置的传递和读取。

5 Flink on Kubernetes- 交互

  整个交互的流程比较简单,用户往 Kubernetes 集群提交定义好的资源描述文件即可,例如 deployment、configmap、service 等描述。后续的事情就交给Kubernetes 集群自动完成。Kubernetes 集群会按照定义好的描述来启动 pod,运行用户程序。各个组件的具体工作如下:   ●Service: 通过标签 (label selector) 找到 job manager 的 pod 暴露服务。   ●Deployment:保证 n 个副本的 container 运行 JM/TM,应用升级策略。   ●ConfigMap:在每个 pod 上通过挂载 /etc/flink 目录,包含 flink-conf.yaml内容。

6 Flink on Kubernetes- 实践

接下来就讲一下 Flink on Kubernetes 的实践篇,即 K8s 上是怎么运行任务的。

6.1  Session Cluster

  首先启动 Session Cluster,执行上述三条启动命令就可以将 Flink 的 Job-Manager-service、jobmanager-deployment、taskmanager-deployment 启动起来。启动完成之后用户可以通过接口进行访问,然后通过端口进行提交任务。若想销毁集群,直接用 kubectl delete 即可,整个资源就可以销毁。   Flink 官方提供的例子如图所示,图中左侧为 jobmanager-deployment.yaml配置,右侧为 taskmanager-deployment.yaml 配置。   在 jobmanager-deployment.yaml 配 置 中, 代 码 的 第 一 行 为 apiVersion,apiVersion 是 API 的一个版本号,版本号用的是 extensions/vlbetal 版本。资源类 型 为 Deployment, 元 数 据 metadata 的 名 为 flink-jobmanager,spec 中 含有副本数为 1 的 replicas,labels 标签用于 pod 的选取。containers 的镜像名为 jobmanager,containers 包含从公共 docker 仓库下载的 image,当然也可以使用公司内部的私有仓库。args 启动参数用于决定启动的是 jobmanager 还是taskmanager;ports 是服务端口,常见的服务端口为 8081 端口;env 是定义的环境变量,会传递给具体的启动脚本。   右图为 taskmanager-deployment.yaml 配置,taskmanager-deployment.yaml 配 置 与 jobmanager-deployment.yaml 相 似, 但 taskmanager-deployment.yaml 的副本数是 2 个。
 6.2 Job Cluster   除了 Session 模式,还有一种 Per Job 模式。在 Per Job 模式下,需要将用户代码都打到镜像里面,这样如果业务逻辑的变动涉及到 Jar 包的修改,都需要重新生 成镜像,整个过程比较繁琐,因此在生产环境中使用的比较少。   以使用公用 docker 仓库为例,Job Cluster 的运行步骤如下:   ● build 镜 像: 在 flink/flink-container/docker 目 录 下 执 行 build.sh 脚 本,指定从哪个版本开始去构建镜像,成功后会输出 “Successfully tagged topspeed:latest” 的提示。
sh build.sh --from-release --flink-version 1.7.0 --hadoop-version 2.8 
--scala-version 2.11 --job-jar ~/
flink/flink-1.7.1/examples/streaming/TopSpeedWindowing.jar --image-name 
topspeed
  ● 上传镜像:在 hub.docker.com 上需要注册账号和创建仓库进行上传镜像。
docker tag topspeed zkb555/topspeedwindowing
docker push zkb555/topspeedwindowing
  ● 启动任务:在镜像上传之后,可以启动任务。
kubectl create -f job-cluster-service.yaml
FLINK_IMAGE_NAME=zkb555/topspeedwindowing:latest FLINK_JOB=org.apache.flink.
streaming.
examples.windowing.TopSpeedWindowing FLINK_JOB_PARALLELISM=3 envsubst < jobcluster-job.
yaml.template | kubectl create -f -
FLINK_IMAGE_NAME=zkb555/topspeedwindowing:latest FLINK_JOB_PARALLELISM=4 
envsubst < 
task-manager-deployment.yaml.template | kubectl create -f -

 

 

 

 

 

标签:Flink,Kubernetes,flink,JobManager,剖析,yaml,deployment,原理
来源: https://www.cnblogs.com/qiu-hua/p/15220732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有