flink kubeclient是面向flink应用的fabric8 kubeclient的封装,本文分析flink如何封装kubeclient,核心组件是装饰器,资源和ServiceType,下面通过分析业务创建作业管理器组件(createJobManagerComponent)了解flink kubeclient
1 场景
2 新建作业管理器组件
1. KubernetesJobManagerFactory构建KubernetesJobManagerSpecification
2. KubernetesJobManagerSpecification有两属性Deployment和accompanyingResources,前者Deployment是k8s资源对象,后者是类型是List<HasMetadata>,用来管理发布的控制器,详情可参考k8s文档;accompanyingResources定义k8s资源对象,如 ConfigMap,Service等
3. KubernetesStepDecorator装饰器,装饰器列表实现责任链模式,装饰模板构建的FlinkPod,包括主容器和其他容器,增加其特性,用户使用此机制定制pod,后面几章分析几个典型的装饰器
4. Fabric8FlinkKubeClient的createJobManagerComponent,请求k8s集群构建和启动flink master组件,输入参数是KubernetesJobManagerSpecification,其Deployment属性直接用于Fabric8 kubeclient创建Deployment对象
下面分析几个作业管理组件重要的容器装饰器
2.1 InitJobManagerDecorator
读入配置属性,设置pod的容器
2.2 CmdJobManagerDecorator
装饰器实现了pod装饰,装饰主容器,设置shell执行命令
设置执行脚本KUBERNETES_JOB_MANAGER_SCRIPT_PATH = "kubernetes-jobmanager.sh"
deploymentTarget kubernetes-session或kubernetes-application
2.3 ExternalServiceDecorator
装饰器构建k8s Service对象
读入ServiceType,flink对应k8s Service的抽象类,实现buildUpExternalRestService方法,构建k8s Service
2.4 FlinkConfMountDecorator/PodTemplateMountDecorator
两个装饰器功能相同,构建ConfigMap,非主容器作为存储卷,主容器挂载存储卷
2.5 总结
flink kubeclient要点
1. 模板构建初始的FlinkPod,拥有初始的完整的特性和属性
2. 可配置的/可扩展的装饰器列表增加FlinkPod的特性和属性,以及相应的资源,ConfigMap,Service等
3. Resource是k8s资源的简单封装;ServiceType是k8s Service对象的构建器基类