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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐