k8s-通过配置映射更新触发新Pod创建

时间:2019-03-22 04:39:07

标签: kubernetes

我有一个部署,通过配置映射为其设置pod的env变量。

    envFrom:
    - configMapRef:
        name: map

我的配置图将如下所示

apiVersion: v1
data:
  HI: HELLO
  PASSWORD: PWD
  USERNAME: USER
kind: ConfigMap
metadata:
  name: map

所有吊舱都从地图设置了这些环境变量。现在,如果我更改配置映射文件并应用-kubectl apply -f map.yaml,则会得到map is configured的确认。但是,它不会使用更新的环境变量触发新的Pod创建。

有趣的是这个作品

kubectl set env deploy/mydeploy PASSWORD=NEWPWD

但不是这个

kubectl set env deploy/mydeploy --from=cm/map

但是我正在寻找通过配置映射通过更新的env变量创建新Pod的方法!

2 个答案:

答案 0 :(得分:0)

  

有趣的是这个作品

     

kubectl set env deploy / mydeploy PASSWORD = NEWPWD

     

但不是这个

     

kubectl set env deploy / mydeploy --from = cm / map

这是预期的行为。您的pod清单未在第二个命令中更改(使用cm时),这就是Kubernetes不重新创建它的原因。

有几种解决方法。基本上,您可以做的是每次ConfigMap更改时人为更改Pod清单,例如使用ConfigMap内容的sha256sum向Pod添加注释。这实际上是Helm建议您执行的操作。如果您使用头盔,则可以按照以下步骤操作:

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]

从这里:https://github.com/helm/helm/blob/master/docs/charts_tips_and_tricks.md#automatically-roll-deployments-when-configmaps-or-secrets-change

只需确保将注释添加到Pod(模板)对象,而不是Deployment本身。

答案 1 :(得分:0)

简单的答案是“否”。

如果您不使用头盔并寻找黑客,则在更新configMap之后,只需使用一个虚拟env变量-继续更新该值只是为了触发滚动更新。

kubectl set env deploy/mydeploy DUMMY_ENV_FOR_ROLLING_UPDATE=dummyval