【问题标题】:Kubernetes scale up pod with dynamic environment variableKubernetes 使用动态环境变量扩展 pod
【发布时间】:2021-05-15 02:52:41
【问题描述】:

我想知道是否有办法根据高负载按比例动态设置环境变量。

假设我们有

Kubernetes 的服务名为 Generic Consumer,一开始有 4 个 pod。首先 我想设置 75% 的 pod 应该有环境变量 Gold 和 25% Platinium。那可能吗? (% 可以改为静态数字,例如3个节点Gold,1个Platinium

第二个问题: 如果Platinium pod 负载很高,是否有办法配置 Kubernetes/charts 以仅扩展Platinium,然后在较高负载消退后减小它 到目前为止,我想出了创建 2 个单独的 YAML 文件,其中包含不同的 env 变量和副本编号。

显然,这样做的全部目的是优先考虑某些主题 我已将此作为参考https://www.confluent.io/blog/prioritize-messages-in-kafka。 所以在上面的例子中,Generic Consumer 将是 Kafka 消费者,它将使用 env 变量来获取存储桶配置

configs.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,
   BucketPriorityAssignor.class.getName());
configs.put(BucketPriorityConfig.TOPIC_CONFIG, "orders-per-bucket");
configs.put(BucketPriorityConfig.BUCKETS_CONFIG, "Platinum, Gold");
configs.put(BucketPriorityConfig.ALLOCATION_CONFIG, "70%, 30%");
configs.put(BucketPriorityConfig.BUCKET_CONFIG, "Platinum");
consumer = new KafkaConsumer<>(configs);

如果您有其他选择,请告诉我!

【问题讨论】:

  • 关于第一个问题,您可以使用具有特定标签的 2 个部署和具有 2 个标签的服务来与两个部署“链接”。如果您有 2 个部署,则可以创建 2 个 HPA。您是否正在寻找 2 个部署不适合您的替代方案?
  • 谢谢,@PjoterS 现在我正在做研究,所以我想找出所有可用的可能性。
  • 同一部署产生的所有 pod 都是相同的;它们都将始终具有相同的环境变量。我认为,如果需要告知流程正在处理哪个优先级,那么您目前使用两个单独部署的方法可能是最好的方法。

标签: kubernetes apache-kafka


【解决方案1】:

正如评论部分中提到的,最通用的选项(并且可能是最适合您的优先级方案)是使用 goldplatinium labels 保持两个单独的部署。

关于第一个问题,例如 @David Maze 指出的,来自 Deployment 的 pod 是相同的,你不能有几个 pod 有一个标签,而其他几个 pod 有不同的标签。即使您手动创建(3 个带有 gold 的 Pod 和 1 个带有 platiunuim 的 Pod),您也无法使用 HPA

此选项允许您根据情况进行调整。例如,您可以使用HPA 扩展一个部署,使用VPA 扩展另一个部署,或者同时使用HPA。将帮助您维持预算,即对于 gold 用户,您可能会限制最多 5 个 Pod 同时运行,对于 platinium,您可以将此最大值设置为 10。

你可以考虑Istio Traffic Management来路由请求,但在我看来,两个分开部署的方法更合适。

【讨论】:

  • 是的,它回答了我的问题,谢谢你们!
猜你喜欢
  • 1970-01-01
  • 2020-03-30
  • 2021-08-26
  • 2023-03-30
  • 1970-01-01
  • 2019-06-30
  • 2020-12-01
  • 2017-12-18
  • 2020-10-11
相关资源
最近更新 更多