返回

Flink on Container 1.10:集群管理下的新格局

人工智能

容器管理系统演变

容器管理系统是一种用于部署、管理和扩展容器的软件。容器是一种轻量级虚拟化技术,它可以将应用程序与底层基础设施隔离,从而提高应用程序的可移植性和可扩展性。

容器管理系统的演变大致可以分为以下几个阶段:

  1. 早期阶段 :在这个阶段,容器管理系统还比较简单,主要功能是提供容器的部署和管理。
  2. 编排阶段 :在这个阶段,容器管理系统开始支持容器的编排,即允许用户将多个容器组合成一个应用程序,并提供对应用程序的管理和监控。
  3. 云原生阶段 :在这个阶段,容器管理系统开始与云计算平台集成,并支持容器的云原生部署和管理。

目前,主流的容器管理系统包括 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 支持两种部署模式:

  1. Session 模式 :在这种模式下,Flink 作业会在 Kubernetes 集群中创建一个新的 JobManager 和 TaskManager。
  2. Application 模式 :在这种模式下,Flink 作业会复用已经存在的 JobManager 和 TaskManager。

Flink on K8S 还支持多种调度策略,包括:

  1. FIFO 调度 :这种策略按照作业提交的顺序来调度作业。
  2. 公平调度 :这种策略会根据作业的资源需求和历史运行情况来调度作业。
  3. 优先级调度 :这种策略允许用户为作业指定优先级,优先级高的作业会优先被调度。

Flink on K8S 实战经验分享

我们在过去的一年中,在生产环境中使用 Flink on K8S 来运行 Flink 作业。在使用过程中,我们遇到了以下几个问题:

  1. 集群稳定性问题 :Flink on K8S 集群的稳定性不如 Flink on Yarn 集群的稳定性。这是因为 Kubernetes 集群中的节点可能会随时发生故障,而 Flink on K8S 集群的稳定性依赖于 Kubernetes 集群的稳定性。
  2. 任务调度问题 :Flink on K8S 的任务调度策略不够灵活,无法满足我们的一些特殊需求。例如,我们希望能够将某些作业优先调度,但 Flink on K8S 的默认调度策略不支持这种情况。
  3. 监控问题 :Flink on K8S 的监控功能不够完善,无法满足我们的监控需求。例如,我们希望能够监控作业的资源使用情况和执行情况,但 Flink on K8S 的默认监控功能无法提供这些信息。

为了解决这些问题,我们做了以下几项工作:

  1. 优化 Kubernetes 集群的配置 :我们通过优化 Kubernetes 集群的配置,提高了集群的稳定性。例如,我们增加了节点的数量,并启用了高可用性功能。
  2. 开发自定义调度器 :我们开发了一个自定义调度器,来满足我们的一些特殊需求。例如,我们能够将某些作业优先调度,并能够根据作业的资源使用情况和执行情况来调度作业。
  3. 集成第三方监控系统 :我们集成了第三方监控系统,来满足我们的监控需求。例如,我们集成了 Prometheus 来监控作业的资源使用情况和执行情况。

通过以上几项工作,我们解决了 Flink on K8S 在生产环境中的稳定性、任务调度和监控等问题,保证了 Flink 作业的正常运行。

Demo

最后,我们将通过一个演示,手把手地演示 Flink on K8S 的集群部署、任务提交和监控等操作。

  1. 集群部署

首先,我们需要创建一个 Kubernetes 集群。我们可以使用 kubeadm 或其他工具来创建 Kubernetes 集群。

创建好 Kubernetes 集群后,我们需要安装 Flink on K8S。我们可以通过以下命令来安装 Flink on K8S:

helm install flink flink-helm-chart

安装好 Flink on K8S 后,我们就可以在 Kubernetes 集群中部署 Flink 作业了。

  1. 任务提交

我们可以通过以下命令来提交 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
  1. 监控

我们可以通过以下命令来监控 Flink 作业:

kubectl get pods -l app=flink-job

我们可以通过以上命令来查看 Flink 作业的 Pod 状态。

我们还可以通过以下命令来查看 Flink 作业的日志:

kubectl logs -l app=flink-job

通过以上演示,我们了解了 Flink on K8S 的集群部署、任务提交和监控等操作。