发布于: May 7, 2021

今天,我们启动了对 Pod 模板的 Amazon EKS 上的 Amazon EMR 支持,以使它简单地在共享的 EKS 集群上运行 Spark 作业。Pod 是一组由一个或多个容器组成的容器组,具有共享存储和网络资源,以及如何运行这些容器的规范。Pod 模板是确定每个 Pod 的运行方式的规范。客户通常会在一个共享的 EKS 集群上整合多个应用程序,以提高利用率并节省成本。然而,每个应用程序可能有不同的要求。例如,您可能希望在 SSD 支持的实例上运行性能密集型工作负载,比如 ML 模型训练作业,以获得更好的性能,或者在 Spot 实例上运行临时工作负载以降低成本。您还可以计划一个单独的日志记录容器将日志转发到现有的监控应用程序。此次发布后,您可以将 Pod 模板与 EKS 上的 EMR 结合使用,以配置如何在共享 EKS 集群上运行 Spark 作业。

要降低成本,客户可以计划 Spark 驱动程序 Pod 以在 EC2 按需实例上运行,同时计划 Spark 执行程序 Pod 以在 EC2 Spot 实例上运行。Kubernetes 客户经常使用“污点”、“容忍”和“标签”来确保 Pod 被计划到正确的工作线程节点中。污点是工作线程节点的一个属性,用于使节点限制哪些 Pod 可以在其上运行。相反,容忍可以使 Pod 被安排到一个匹配的污点上。标签与 nodeSelectors 结合使用以将 Pod 定向到工作线程。现在,Pod 模板可用于将容忍应用到 Spark 驱动程序 Pod,所以它将运行在 EC2 按需实例上,而 Spark 执行程序 Pod 有一个单独的容忍,因此它们将只在 EC2 Spot 实例上运行。

要将日志转发到您的集中日志记录应用程序,客户可以使用其 Spark 作业部署一个 Sidecar 容器。Sidecar 容器部署在与应用程序容器相同的 Pod 中,但提供了额外的功能。在此示例中,它转发作业日志。EKS 上的 EMR 提供内置的日志转发到 Amazon CloudWatch 和 Amazon S3。然而,如果客户想要将日志转发到他们自己的日志报告应用程序,他们会将日志转发器部署为 DaemonSet。Daemonsets 直接在 kubernetes 工作线程节点上运行。现在,Pod 模板可用于以每个作业或每个 Pod 为基础将日志转发部署为 Sidecar 容器。

要提供资源利用率,客户可以支持多个团队在同一个 EKS 集群上运行他们的工作负载。通常,每个团队将获得一个指定的 EC2 节点组来运行他们的工作负载。以前,只能使用标签和关联将工作负载定向到正确的节点组。客户可以将污点应用到团队的节点组,现在可以使用 Pod 模板将相应的容忍应用到其工作负载。这确保了只有指定的团队可以将作业计划到他们的节点组。

要实施基于团队的节点组,首先创建一个包含标签和代表团队的污点的节点组。污点是工作线程节点的一个属性,用于使节点限制哪些 Pod 可以在其上运行。相反,容忍可以使 Pod 被安排到一个匹配的污点上。标签使用关联将应用程序定向到团队的指定节点组,容忍则使其能够对污点进行计划。创建一个包括相应的容忍和关联的 Pod 模板,然后将其存储在您的作业可以访问的 S3 存储桶中。可以为 Spark 驱动程序和执行程序 Pod 创建 Pod 模板,以提供不同的部署选项,且您可以在作业提交期间指定模板的位置。

有关 Pod 模板功能和使用案例的更多信息,请访问我们的文档。有关 EKS 上的 Amazon EMR 的更多信息,请访问我们的 EKS 上的 Amazon EMR 文档或查看我们关于 EKS 上的 Amazon EMR 的深入探究技术讲座