【问题标题】:Start kubernetes pod memory depending on size of data job根据数据作业的大小启动 kubernetes pod 内存
【发布时间】:2018-12-07 00:55:03
【问题描述】:

有没有办法根据数据作业的大小(我的用例)动态扩展 Pod 的内存大小?

目前我们有使用内存量定义的 Job 和 Pod,但我们不知道给定时间片(有时 1000 行,有时 100,000 行)的数据量。
因此,如果数据大于我们预先分配的内存,它将中断。

我曾想过按数据量使用切片,即每 10,000 行切割一次,我们将知道处理固定数量的行的内存需求。但是我们试图按时间聚合,因此需要时间片。

或者任何其他解决方案,例如 kubernetes 上的 Spark?

另一种看待它的方式:
我们如何在 AWS 上的 Kubernetes 中实现 Cloud Dataflow

【问题讨论】:

    标签: apache-spark kubernetes apache-spark-sql google-cloud-dataflow apache-beam


    【解决方案1】:

    我已经找到了部分解决方案。
    请注意,此问题有 2 个部分。
    1. 根据数据作业的大小使 Pod 请求正确的内存量
    2. 确保这个 Pod 可以找到一个 Node 来运行。

    Kubernetes Cluster Autoscaler (CA) 可以解决第 2 部分。
    https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler

    根据自述文件:
    Cluster Autoscaler 是一个工具,当集群中存在因资源不足而无法运行的 Pod 时,它会自动调整 Kubernetes 集群的大小。

    因此,如果有一个数据作业需要比当前运行的节点更多的内存,它将通过增加节点组​​的大小来启动一个新节点。
    详情:
    https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md

    我仍然不确定如何做第 1 点。

    第 1 点的替代方法,在没有特定内存请求或限制的情况下启动容器: https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#if-you-don-t-specify-a-memory-limit

    如果您没有为 Container 指定内存限制,则使用其中之一 适用情况:

    The Container has no upper bound on the amount of memory it uses. 
    or
    The Container could use all of the memory available on the Node where it is running.
    

    【讨论】:

      【解决方案2】:

      最好在容器定义中始终定义resources,尤其是:

      • limits:CPU和内存的上层
      • requests: CPU 和内存的最低级别

      这使调度程序可以做出更好的决定,并简化了为每个 pod (https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/) 分配 服务质量 (QoS),这分为三个可能的类别:

      • 保证(最高优先级):当 requests = limits
      • 突发性:当请求
      • BestEffort(最低优先级):当未设置请求和限制时

      QoS 启用了在系统过度使用时杀死 pod 的标准。

      【讨论】:

        【解决方案3】:

        如果您事先不知道给定时间片的 pod 的内存需求,那么 Kubernetes 集群自动缩放器很难按照本文档 [1] 为您自动扩展节点池。因此,对于您的两个建议,例如使用 Kubernetes Cluster Autoscaler 在 Kubernetes 上运行 Cloud Dataflow 或 Spark,可能不适用于您的情况。

        但是,您可以使用自定义缩放作为解决方法。例如,您可以将 pod 的内存相关指标导出到 Stackdriver,然后部署 Horizo​​ntalPodAutoscaler (HPA) 资源以将您的应用程序扩展为 [2]。

        [1]https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#how_cluster_autoscaler_works

        [2]https://cloud.google.com/kubernetes-engine/docs/tutorials/custom-metrics-autoscaling

        【讨论】:

          猜你喜欢
          • 2021-07-15
          • 2019-03-16
          • 2021-12-18
          • 2020-09-12
          • 2021-06-28
          • 2017-06-19
          • 2019-09-29
          • 1970-01-01
          相关资源
          最近更新 更多