Flink 1.10 Native Kubernetes 原理与实践

  • 时间:
  • 浏览:1
  • 来源:彩神3D_神彩3D官方

(2) 提前创建好用户和赋权(RBAC)

大伙 知道,在 Flink 1.9 以及事先的版本上面,可能性要在 Kubernetes 上运行 Flink 任务是还要事先指定好还要的 TaskManager(TM) 的个数以及CPU和内存的。就是的难题图片是:大多数情况报告下,你在任务启动前根本无法精确的预估这人任务还要好多个个TM。可能性指定的TM多了,会愿因资源浪费;可能性指定的TM个数少了,会愿因任务调度不起来。本质愿因是在 Kubernetes 上运行的 Flink 任务并沒有 直接向 Kubernetes 集群去申请资源。

作者:周凯波(宝牛)

工作原理如下(段首的序号对应图中箭头所示的数字):

使用 kubectl logs kaibo-test-6f7dffcbcf-c2p7g -f 就能想看 日志了。

更多的参数详见文档:https://ci.apache.org/projects/flink/flink-docs-release-1.10/ops/config.html#kubernetes

可能性沒有 这人 ~/.kube/config 文件,会报错:

可能性前面第(1)和第(2)步沒有 做,会出显 各种异常,通过 kubectl logs 就能很方便的想看 日志了。

在提交任务后,通过 kubectl get pods 要能想看 Flink 为 TaskManager 分配了新的 Pod。

千呼万唤始出来,在 Kubernetes 如火如荼的今天,Flink 社区终于在 1.10 版本提供了对 Kubernetes 的原生支持,也就是 Native Kubernetes Integration。不过还就是Beta版本,预计会在 1.11 版本上面提供完整版的支持。

大伙 从 Flink WebUI 页面还还可以 能想看 ,并且并且刚现在开始 英语 启动时,UI上显示 Total/Available Task Slots 为0, Task Managers 也是0。随着任务的提交,资源会动态增加。任务停止后,资源就会释放掉。

(6) 停止 session cluster

Flink 的文档上对要怎样使用可能性写的比较完整版了,不过并且并且刚现在开始 英语 总会踩到这人坑。可能性对 Kubernetes 很熟,可能性会花点时间。

假如 启动 session cluster 的命令行还要带上参数:

(5) 提交任务

(3) 这人步是可选的。默认情况报告下, JobManager 和 TaskManager 只会将 log 写到个人所有 pod 的 /opt/flink/log 。可能性想通过 kubectl logs 想看 日志,还要将 log 输出到控制台。要做如下修改 FLINK_HOME/conf 目录下的 log4j.properties 文件。

(1) 首先得有个 Kubernetes 集群,会有个 ~/.kube/config 文件。尝试执行 kubectl get nodes 看下集群与否 正常。

还还可以 想看 ,Flink 1.10 版本对和 Kubernetes 的集成做了很好的尝试。期待社区后续的 1.11 版本能对 per-job 提供支持,以及和 Kubernetes 的层厚集成,类似基于原生 Kubernetes API 的高可用。最新进展请关注 FLINK-14450。

(4) 终于还还可以 并且并且刚现在开始 启动 session cluster了。如下命令是启动另两个 每个 TaskManager 是4G内存,另两个 CPU,另两个 slot 的 session cluster。

可能性沒有 创建用户,使用默认的用户去提交,会报错:

这人日志太少会愿因 WebUI 上打开 jobmanger log 是空白,可能性文件太少了前端无法显示。

Session cluster 启动还还可以 能通过 kubectl get pods,svc 来看与否 正常。

可能性出显 极少量的这人日志(目前遇到是云厂商的LoadBalance liveness探测愿因):

也还还可以 手工删除资源:

打开 http://127.0.0.1:501 就能想看 Flink 的 WebUI 了。

通过端口转发来查看 Web UI:

Flink 在 1.10 版本完成了Active Kubernetes Integration的第一阶段,支持了 session clusters。后续的第二阶段会提供更完整版的支持,如支持 per-job 任务提交,以及基于原生 Kubernetes API 的高可用,支持更多的 Kubernetes 参数如 toleration, label 和 node selector 等。Active Kubernetes Integration中的Active愿因 Flink 的 ResourceManager (KubernetesResourceManager) 还还可以 直接和 Kubernetes 通信,按需申请新的 Pod,类似 Flink 中对 Yarn 和 Mesos 的集成所做的那样。在多租户环境中,用户还还可以 利用 Kubernetes 上面的 namespace 做资源隔离启动不同的 Flink 集群。当然,Kubernetes 集群中的用户帐号和赋权是还要提前准备好的。

还还可以 暂时在 log4j.properties 上面配置上:

前面两步完成后,整个 Flink session cluster 就启动好了,还还可以 接受提交任务请求了。