【问题标题】:k8s - trigger new pod creation via config map updatek8s - 通过配置映射更新触发新的 pod 创建
【发布时间】:2019-03-22 04:39:07
【问题描述】:

我有一个部署,其中 pod 的环境变量是通过配置映射设置的。

    envFrom:
    - configMapRef:
        name: map

我的配置映射将如下所示

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

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

有趣的是,这个可行

kubectl set env deploy/mydeploy PASSWORD=NEWPWD

但不是这个

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

但我正在寻找通过配置映射使用更新的环境变量创建新 pod 的方法!

【问题讨论】:

  • 如果您只是想这样做,您可以删除当前正在运行的 Pod,以便部署默认从 configmap 生成新的 Pod。
  • @HarshManvar,我知道这一点。问题是查找是否有任何方法可以通过配置映射更新触发。

标签: kubernetes


【解决方案1】:

有趣的是,这个可行

kubectl set env deploy/mydeploy PASSWORD=NEWPWD

但不是这个

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

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

有几种方法可以解决这个问题。基本上你可以做的是在每次 ConfigMap 更改时人为地更改 Pod 清单,例如使用 ConfigMap 内容的 sha256sum 向 Pod 添加注释。这实际上是 Helm 建议你做的。如果你使用 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 本身。

【讨论】:

    【解决方案2】:

    简单的答案是否定的。

    如果您不使用 helm 并在寻找 hack,在更新 configMap 后,只需使用虚拟环境变量 - 不断更新值以触发滚动更新。

    kubectl set env deploy/mydeploy DUMMY_ENV_FOR_ROLLING_UPDATE=dummyval
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2021-09-23
      • 2015-02-02
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多