美文网首页flink
Flink On K8s 集群原理

Flink On K8s 集群原理

作者: fat32jin | 来源:发表于2020-06-09 19:36 被阅读0次

    Flink On K8s 架构

    image.png

    Flink 任务在 Kubernetes 上运行的步骤有:

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

    JobManager 的执行过程分为两步 :

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

    Flink on Kubernetes-TaskManager:

    TaskManager 也是通过 Deployment 来进行描述,保证 n 个副本的 Container 运行 TaskManager,同时也需要定义一个标签,例如 flink-taskmanager。

    对于 JobManager 和 TaskManager 运行过程中需要的一些配置文件,如:flink-conf.yaml、hdfs-site.xml、core-site.xml,可以通过将它们定义为 ConfigMap 来实现配置的传递和读取

    image.png

    整个交互的流程比较简单,用户往 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 内容。

    •Session Cluster 模式

    • 启动
        •kubectl create -f jobmanager-service.yaml
        •kubectl create -f jobmanager-deployment.yaml
        •kubectl create -f taskmanager-deployment.yaml
    •Submit job
        •kubectl port-forward service/flink-jobmanager 8081:8081
        •bin/flink run -d -m localhost:8081 ./examples/streaming/
    

    TopSpeedWindowing.jar
    • 停止
    •kubectl delete -f jobmanager-deployment.yaml
    •kubectl delete -f taskmanager-deployment.yaml
    •kubectl delete -f jobmanager-service.yaml

    首先启动 Session Cluster,执行上述三条启动命令就可以将 Flink 的 Job-Manager-service、jobmanager-deployment、taskmanager-deployment 启动起来。启动完成之后用户可以通过接口进行访问,然后通过端口进行提交任务。若想销毁集群,直接用 kubectl delete 即可,整个资源就可以销毁。

    配置文件示例

    image.png image.png

    ● Job Cluster 模式

    除了 Session 模式,还有一种 Per Job 模式。在 Per Job 模式下,需要将用户代码都打到镜像里面,这样如果业务逻辑的变动涉及到 Jar 包的修改,都需要重新生成镜像,整个过程比较繁琐,因此在生产环境中使用的比较少。
    以使用公用 docker 仓库为例,Job Cluster 的运行步骤如下:

    ● build 镜像:在 flink/flink-container/docker 目录下执行 build.sh 脚本
    ● 上传镜像:在 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 <
    job-cluster-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 On K8s 集群原理

        本文链接:https://www.haomeiwen.com/subject/bleetktx.html