我想知道是否有办法根据高负载在规模上动态设置环境变量。
假设我们有
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);
如果您有其他选择,请告诉我!
答案 0 :(得分:1)
正如评论部分所提到的,最通用的选项(并且可能最适合您的优先级方案)是使用 gold
和 platinium
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 来路由请求,但在我看来,两个单独部署的方法更合适。