flink on native k8s by application mode

1,392 阅读1分钟

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
COPY dataprocess-0.0.1-SNAPSHOT.jar $FLINK_HOME/

3.部署flink client(client上云)

4.部署jobmanager、taskmanager

进入flink-client pod内部

执行如下命令:

flink run-application \
--target kubernetes-application \
-Dkubernetes.namespace=xxx \
-Dkubernetes.cluster-id=jobmanager-application \
-Dkubernetes.rest-service.exposed.type=NodePort \
-Dkubernetes.container.image=10.4.xx.xx/library/flink:dhf \
-Dkubernetes.container.image.pull-policy=Always local:///opt/flink/dataProcess-0.0.1-SNAPSHOT-jar-with-dependencies.jar \
-kafkaBroker "192.168.xx.xx:9092,192.xx.xx.227:9093,192.168.xx.xx:9094" \
-kafkaSchemaTopic connector9 \
-kafkaDataTopics "connector9.dhf1.tab1,connector9.dhf1.test" 

最后三行为向jar包传递的自定义参数

执行命令后会自动 1个jobmanager、1个或多个taskmanager。

5.程序监控

jobmanager、taskmanager均有日志输出用于查看程序执行进程。

也可通过k8s master节点ip加上图中暴露的端口7447访问flink dashboard.

关注公众号,添加作者微信,一起讨论更多。

公众号