Kubernetes 使用动态环境变量扩展 pod

时间:2021-02-11 11:03:30

标签: kubernetes apache-kafka

我想知道是否有办法根据高负载在规模上动态设置环境变量。

假设我们有

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

第二个问题: 如果 Platinium pod 的负载很高,是否可以将 Kubernetes/charts 配置为仅缩放 Platinium,然后在更高的负载消退后减少它 到目前为止,我想出了创建 2 个单独的 YAML 文件,其中包含 diff 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);

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

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以考虑使用 Istio Traffic Management 来路由请求,但在我看来,两个单独部署的方法更合适。