• flink集群与资源@k8s源码分析-集群


    0 介绍

    本文是flink集群与资源@k8s源码分析系列的第二篇-集群

    1 场景

    下面详细分析各用例

    2 启动k8s集群

    k8s集群支持session和application模式,job模式将会被废弃,本文分析session模式集群

    Configuration作为配置容器,几乎所有的构建需要从配置类获取配置项,这里不显示关联关系

    1. 用户命令行执行kubernates-session.sh,主入口是KubernetesSessionCli main

    2.
    ClusterClientServiceLoader SPI机制载入ClusterClientFactory,k8s环境下实现类是KubernetesClusterClientFactory

    3. ClusterClientFactory是ClusterClient工厂,首先创建ClusterDescriptor集群描述,该类负责部署集群,最终返回ClusterClient,k8s环境下实现类是
    KubernetesClusterDescriptor

    4.
    KubernetesClusterDescriptor新建集群规格ClusterSpecification,该类不是针对k8s,定义了flink master和任务管理器的内存容量等技术参数,通用于容器类的集群;
    KubernetesSessionClusterEntrypoint类型设置为ENTRY_POINT_CLASS参数,后面《部署集群》使用到

    5.
    KubernetesClusterDescriptor的deploySessionCluster部署k8s集群,参看《部署集群》用例,最后返回ClusterClient,用于后续提交作业和其他集群操作

    3 部署集群

    部署集群是启动的第二步,
    KubernetesClusterDescriptor的deploySessionCluster方法的一部分,构建部署规格,flink kubeclient提交到k8s集群管理器,触发flink master构建和启动

    1. 首先更新配置,主要是对外端口,更新为固定的,支持对外Service通讯

    2. 构建
    KubernetesJobManagerParameters,该类封装Configuration和ClusterSpecification,为获取参数提供便利

    3. 构建FlinkPod,首先载入pod模板构建KubernetesPod,KubernetesPod是一个包装了k8s Pod对象的Resource类;构建FlinkPod,定义了mainContainer ,podWithoutMainContainer,其中主容器固定名称,用于运行作业管理器任务管理器,其他容器运行相关的资源,如ConfigMap,Service等,详细分析参考10 flink kubeclient

    4.
    KubernetesJobManagerFactory《构建作业管理器部署规格》构建部署规格,Fabric8FlinkKubeClient使用部署规格《新建作业管理器组件(flink master)》部署flink master组件,两用例在10 flink kubeclient分析

    最后客户端调用
    createClusterClientProvider返回ClusterClient

  • 相关阅读:
    【Linux】网络编程套接字Scoket:UDP网络编程
    Python基础知识点入门
    字符串的认识
    Java中的数组,你知道多少细节?
    高数_第3章重积分_三重积分的奇偶性
    数据结构_复杂度讲解(附带例题详解)
    c++函数
    关于IDEA中gradle项目bootrun无法进入断点以及gradle配置页面不全的解决方案
    数论专题(3)逆元
    史上最全前端八股文来了
  • 原文地址:https://blog.csdn.net/szlhj/article/details/133066269