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