flink1.13于5月4日发布,版本迭代之快,更是体现了其势不可挡的发展速度。社区活跃度逐步攀升,当然少不了与云原生等技术的集成。 本文主要讲解flink的原生k8s application模式部署步骤,原生k8本质上是flink内部集成了k8s,能够做到Taskmanager的弹性伸缩。
而之所以采用application模式部署,是因其规避了session模式的资源隔离问题、per-job模式的集群生命周期问题,以及两者共同的客户端资源消耗问题,也因其显著优点被广泛用于生产环境。
1.准备
- Kubernetes版本大于等于1.9。
- 可以访问列表,创建,删除容器和服务,可以通过进行配置~/.kube/config。您可以通过运行来验证权限kubectl auth can-i <list|create|edit|delete> pods。
- 启用Kubernetes DNS。
- RBAC:default service account 具有创建,删除Pod的权限。
kubectl create clusterrolebinding flink-role --clusterrole=edit --serviceaccount=namespacwe:default
复制代码
2. Flink镜像制作及推送
dockerfile如下:
FROM flink:1.12
RUN apt-get update && apt-get install vim -y && apt-get install yum -y
COPY flink-sql-connector-hive-3.1.2_2.11-1.12.0.jar flink-table-planner-blink_2.12-1.12.0.jar flink-connector-hive_2.12-1.12.0.jar flink-table-planner_2.12-1.12.0.jar hive-exec-3.1.2.jar flink-shaded-hadoop-2-uber-2.7.5-9.0.jar $FLINK_HOME/lib/
COPY dataprocess-0.0.1-SNAPSHOT.jar dataProcessConfig.yaml hive-site.xml $FLINK_HOME/
复制代码
3.部署flink client(client上云)
4.部署jobmanager、taskmanager
进入flink-client pod内部
执行如下命令:
flink run-application \
--target kubernetes-application \
-Dkubernetes.namespace=###\
-Dkubernetes.cluster-id=jobmanager-application \
-Dkubernetes.rest-service.exposed.type=NodePort \
-Dkubernetes.container.image=10.4.98.29/library/flink \
-Dkubernetes.container.image.pull-policy=Always local:///opt/flink/dataprocess-0.0.1-SNAPSHOT.jar
复制代码
执行命令后会自动 1个jobmanager、1个或多个taskmanager。
5.程序监控
jobmanager、taskmanager均有日志输出用于查看程序执行进程。
也可通过k8s master节点ip加上图中暴露的端口7447访问flink dashboard.
6.展望
jobmanager、taskmanager拉取的镜像即为run-application时指定的image,且jobmanager拉起镜像之后会立即运行指定的jar包,无法在client部署成功后动态修改jar包所需要的配置文件,本文暂且在第一步修改制作镜像之前修改好配置文件。
TODO:flink1.13的新特性中提供了pod template可用于解决上述问题,允许用户通过pod template自定义jobmanager、taskmanager。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END