Flink on Container 1.10:集群管理下的新格局
2024-01-14 00:49:49
容器管理系统演变
容器管理系统是一种用于部署、管理和扩展容器的软件。容器是一种轻量级虚拟化技术,它可以将应用程序与底层基础设施隔离,从而提高应用程序的可移植性和可扩展性。
容器管理系统的演变大致可以分为以下几个阶段:
- 早期阶段 :在这个阶段,容器管理系统还比较简单,主要功能是提供容器的部署和管理。
- 编排阶段 :在这个阶段,容器管理系统开始支持容器的编排,即允许用户将多个容器组合成一个应用程序,并提供对应用程序的管理和监控。
- 云原生阶段 :在这个阶段,容器管理系统开始与云计算平台集成,并支持容器的云原生部署和管理。
目前,主流的容器管理系统包括 Kubernetes、Docker Swarm 和 Mesos。其中,Kubernetes 是目前最流行的容器管理系统,它也是 Flink on K8S 使用的容器管理系统。
Flink on K8S 简介
Flink on K8S 是 Flink 的一个发行版,它允许用户在 Kubernetes 集群上部署和管理 Flink 作业。Flink on K8S 集成了 Kubernetes 的原生 API,因此用户可以使用 Kubernetes 的命令和工具来管理 Flink 作业。
Flink on K8S 支持两种部署模式:
- Session 模式 :在这种模式下,Flink 作业会在 Kubernetes 集群中创建一个新的 JobManager 和 TaskManager。
- Application 模式 :在这种模式下,Flink 作业会复用已经存在的 JobManager 和 TaskManager。
Flink on K8S 还支持多种调度策略,包括:
- FIFO 调度 :这种策略按照作业提交的顺序来调度作业。
- 公平调度 :这种策略会根据作业的资源需求和历史运行情况来调度作业。
- 优先级调度 :这种策略允许用户为作业指定优先级,优先级高的作业会优先被调度。
Flink on K8S 实战经验分享
我们在过去的一年中,在生产环境中使用 Flink on K8S 来运行 Flink 作业。在使用过程中,我们遇到了以下几个问题:
- 集群稳定性问题 :Flink on K8S 集群的稳定性不如 Flink on Yarn 集群的稳定性。这是因为 Kubernetes 集群中的节点可能会随时发生故障,而 Flink on K8S 集群的稳定性依赖于 Kubernetes 集群的稳定性。
- 任务调度问题 :Flink on K8S 的任务调度策略不够灵活,无法满足我们的一些特殊需求。例如,我们希望能够将某些作业优先调度,但 Flink on K8S 的默认调度策略不支持这种情况。
- 监控问题 :Flink on K8S 的监控功能不够完善,无法满足我们的监控需求。例如,我们希望能够监控作业的资源使用情况和执行情况,但 Flink on K8S 的默认监控功能无法提供这些信息。
为了解决这些问题,我们做了以下几项工作:
- 优化 Kubernetes 集群的配置 :我们通过优化 Kubernetes 集群的配置,提高了集群的稳定性。例如,我们增加了节点的数量,并启用了高可用性功能。
- 开发自定义调度器 :我们开发了一个自定义调度器,来满足我们的一些特殊需求。例如,我们能够将某些作业优先调度,并能够根据作业的资源使用情况和执行情况来调度作业。
- 集成第三方监控系统 :我们集成了第三方监控系统,来满足我们的监控需求。例如,我们集成了 Prometheus 来监控作业的资源使用情况和执行情况。
通过以上几项工作,我们解决了 Flink on K8S 在生产环境中的稳定性、任务调度和监控等问题,保证了 Flink 作业的正常运行。
Demo
最后,我们将通过一个演示,手把手地演示 Flink on K8S 的集群部署、任务提交和监控等操作。
- 集群部署
首先,我们需要创建一个 Kubernetes 集群。我们可以使用 kubeadm 或其他工具来创建 Kubernetes 集群。
创建好 Kubernetes 集群后,我们需要安装 Flink on K8S。我们可以通过以下命令来安装 Flink on K8S:
helm install flink flink-helm-chart
安装好 Flink on K8S 后,我们就可以在 Kubernetes 集群中部署 Flink 作业了。
- 任务提交
我们可以通过以下命令来提交 Flink 作业:
flink run -m yarn-cluster -ynm flink-job -yn 2 -ytm 1024 -yjm 1024 -p 1 -c com.example.FlinkJob /path/to/flink-job.jar
- 监控
我们可以通过以下命令来监控 Flink 作业:
kubectl get pods -l app=flink-job
我们可以通过以上命令来查看 Flink 作业的 Pod 状态。
我们还可以通过以下命令来查看 Flink 作业的日志:
kubectl logs -l app=flink-job
通过以上演示,我们了解了 Flink on K8S 的集群部署、任务提交和监控等操作。