deployment - 如何在 Kubernetes 中相同部署的两个 Pod 中使环境变量不同?

基于 this可以在您定义的部署的所有 pod 中创建相同的环境变量。

有没有办法指示 Kubernetes 部署创建具有不同环境变量的 pod?

用例:

假设我有一个监控容器,我想创建它的 4 个副本。如果环境变量如此定义,则此容器有一个正在发送邮件的服务。例如,如果环境变量 IS_MASTER 为真,则服务继续发送这些电子邮件。

apiVersion: v1
kind: Deployment
metadata:
  ...
spec:
  ...
  replicas: 4
  ...
  template:
    ...
    spec:
      containers:
      -env: 
        -name: IS_MASTER
         value: <------------- True only in one of the replicas

(在我的情况下,我使用的是 helm,但同样的事情也可以没有 helm)

最佳答案

据我所知,您正在寻找的是一种反模式,而不是不可能。

据我了解,您似乎正在寻求部署一个可扩展/HA 监控平台,该平台不会在警报上发送 X 次邮件,因此您可以制作一个与其 sibling 交谈的边车容器并“选择”主邮件程序(在这种情况下,StatefulSet 会更容易),或者只是将邮件程序与监控分开,并让它们通过服务相互交谈。这将允许您分别对监控和邮件进行负载平衡。

monitoring-1 \                 / mailer-1
monitoring-2 --- > mailer.svc -- mailer-2
monitoring-3 /                 \ mailer-3

任何邮件请求都将由池中的一个且只有一个邮件程序处理,但这是假设您的监控 Pod 没有在警报时一起触发...如果不是这种情况,那么无论您对邮件程序的“主”选举如何,你必须先解决这个问题。

首先要解决这个问题,我的意思是向您的监控平台添加一个主选举逻辑,以编排事件的主故障转移,有几种方法可以做到这一点,但这实际上取决于您的监控平台是什么以及可以做什么。 ..

虽然,如果您的副本只是以某种方式扩展计算能力并且您的主服务器预计是静态的,那么只需使用 StatefulSet,并在运行时添加一个单行器,执行 if hostname == $statefulset-name-0 then MASTER ,但我觉得这不是最好的主意。

https://stackoverflow.com/questions/52628474/

相关文章:

xcode - 如何解决错误 'app' 的配置设置冲突。 "app"已自动签名,

janusgraph - 如何在 Janusgraph 中获取索引键列表?

maven - 将 Artifact 安装到特定的远程 Maven 存储库

SQL Server - 检查给定的日期+时间是否在两个日期时间变量之间的确切日期+时间

amazon-web-services - AWS Api Gateway作为HTTP代理正在破坏二

audio - 在网络服务器上播放 Apple 的 .caf 音频文件?

docker - 使用 Dockerfile 中的 COPY 在目标目录中复制具有不同名称的文件

ios - 如何在 SwiftUI 中全屏显示 View ?

python-3.x - pyspark中的异常值检测

amazon-web-services - 提供的证书不是有效的自签名证书。请提供有效的自签名证书或