现有kubernetes部署中的环境变量如何添加到新部署中?

时间:2019-05-22 20:11:22

标签: kubernetes

我正在构建一个变异的Webhook,该Webhook将环境变量添加到具有标签标志的部署中的容器中。我看到的是,当部署AdmissionReview到达我的变异Webhook时,已经设置了该环境变量,尽管使用kubectl apply -f spec.yaml所应用的规范文件中没有该环境变量。

仅当集群中已存在具有相同环境变量的同名现有部署时,才会发生此问题。对我而言,这意味着现有部署中的设置将以某种方式合并到新部署中。这没有任何意义,因为我应该能够通过从规格文件中删除环境变量,然后重新应用来从部署中删除环境变量,在这种情况下不起作用。

我已经确认,我们使用的其他任何变异Webhook都不会复制现有部署中的环境变量信息。还有什么其他原因可能导致这种现象?

@matt

新部署中没有缺少env字段,只是该列表中的一个项目。

这是集群中现有部署的env字段:

- env:
  - name: APP_NAME
    value: app
  - name: J_HOST
    valueFrom:
      fieldRef:
        apiVersion: v1
        fieldPath: status.hostIP
  - name: MT_ENABLED
    value: "on"

这是部署规范的env字段:

- env:
  - name: APP_NAME
    value: app
  - name: J_HOST
    valueFrom:
      fieldRef:
        fieldPath: status.hosapp

问题字段是环境变量“ MT_ENABLED”。它永远不在规格文件中。第一次部署时,由Webhook添加。在SECOND部署中,webhook应该使用新值更新值,但是由于它已经存在于接收到的api对象中,因此它不存在(这是我们想要的行为,问题在于它不应该存在于api对象,因为它不在基本规范中

@matt我想您可能已经为我解决了这个问题。合并语义表示,它使用“最后应用的配置”字段进行比较以确定哪些字段已删除。该字段看起来像是在网络挂钩有机会添加MT_ENABLED字段之前存储的。因此,当api服务器将新的规范文件(没有MT_ENABLED字段)与最后应用的配置(没有MT_ENABLED字段)进行比较时,它看不到任何差异,因此决定不更改现有部署的env字段。

这是我目前的猜测。我将尝试运行一个测试,将MT_ENABLED字段添加到上一次应用的配置中,然后查看行为。

更新:这确实是问题所在。我更新了Webhook,还将MT_ENABLED字段也添加到了部署中最后应用的配置批注中,现在kubernetes认识到现有部署中的env列表与新部署中的env列表不同,因此它使用新部署中的环境列表,一切正常。谢谢!

0 个答案:

没有答案