kubernetes,简称K8s,是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。 k8s 通常被描述为一个容器编排(container orchestration)平台。为了理解这个含义,让我们重新审视容器的作用,这有助于知道容器有哪些不足,以及 k8s 如何弥补这些不足。 为什么我们喜欢使用容器?容器提供了一个轻量级的机制来隔离应用程序的环境。对于一个给定的应用程序,我们可以指定其配置和所需要安装的依赖,而不用担心其与同一台物理机上其他的应用程序发生冲突。我们将每个应用程序封装在容器镜像(container image)中,容器镜像可以可靠地运行在任何机器(只要机器有能力运行容器镜像)上,能够提供可移植的能力,即支持应用开发到部署的平滑过渡。此外,因为每个应用是独立的,不用担心环境冲突,所以在同一台物理机上可以部署多个容器,实现更高的资源(内存和 CPU)利用率,最终降低成本。 日志搜集 当我们在 Flink on K8s 上运行一个作业,有一个功能性问题无法回避,就是日志。如果是运行在 YARN 上,YARN 会帮我们做这件事,例如在 Container 运行完成时,YARN 会把日志收集起来传到 HDFS,供后期查看。但是 K8s 并未提供日志搜集与存储,所以我们可以有很多选择去做日志(收集、展示)的事情。尤其是当作业因为异常导致 POD 退出,POD 退出后日志会丢失,这将导致异常排查变得非常困难。 首先往 Kubernetes 集群提交了资源描述文件后,会启动 Master 和 Worker 的 container。 Master Container 中会启动 Flink Master Process,包含 Flink-Container ResourceManager、JobManager 和 Program Runner。 Worker Container 会启动 TaskManager,并向负责资源管理的 ResourceManager 进行注册,注册完成之后,由 JobManager 将具体的任务分给 Container,再由 Container 去执行。 需要说明的是,Master Container 与Worker Container是用一个镜像启动的,只是启动参数不一样。 session模式 Flink Session 集群作为长时间运行的 Kubernetes Deployment 执行。你可以在一个Session 集群上运行多个 Flink 作业。每个作业都需要在集群部署完成后提交到集群。 Kubernetes 中的Flink Session 集群部署至少包含三个组件: 运行JobManager的部署 TaskManagers池的部署 暴露JobManager 的REST 和 UI 端口的服务