kubernetes-在更新configMap后,让pod识别confMap的var更新(kustomize)

在kubernetes中,更新configMap后,pod是不会自动识别configMap中的变动。

configMap更新后,如果想使pod中引用configMap的变量生效,
通常简单的做法是:

方法1. 删除该pod,让其自动产生一份新的pod.
方法2. 修改pod的配置,让其自动产生一份新的pod.
方法3. 增加一个sidecar,让其监控configMap的变化,来重启pod.

下面我们通过修改deployment中的annotations方法来实现剩下pod:
我们使用kustomize 来做试验(如果你没loadBalance,修改改为nodePort方式访问),项目地址:https://github.com/kubernetes-sigs/kustomize/tree/master/examples/helloWorld

一、部署项目:

$ kubectl apply -k .

二、检查运行pod状况

$ curl 192.168.0.7:8666/

Version 1 : Good Morning ! 

三、修改configMap
3.1 这里我们修改: altGreeting的值

$ cat configMap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: the-map
data:
  altGreeting: "Good Morning 3!"
  enableRisky: "false"

3.2 修改kustomization.yaml
这里我们增加一个键值 commonAnnotations-->version

commonLabels:
  app: hello

commonAnnotations:
  version: 1.0.1

resources:
- deployment.yaml
- service.yaml
- configMap.yaml

四、再次重新发布

$ kubectl apply -k .

五、检查运行pod状况

$ curl 192.168.0.7:8666/

Version 1 : Good Morning 3! 

可见,我们改过了configMap中的key-value的值后,在pod已经生效了。

原理就是:通过更新deployment中的Annotations,增加一个version的key,每次需要更新configMap,只要upgrade一次kustomization.yaml中的commonAnnotations->version的值,发布后,pod就会自动重建一次,以此来发现confiMap的新值。

其他方法:

利用sidecar方法:https://github.com/jimmidyson/configmap-reload (prometheus helm 就是使用此方法)

你可能感兴趣的:(kubernetes)