ConfigMap是用來存儲配置文件的kubernetes資源對象,所有的配置內容都存儲在etcd中.
總結
更新 ConfigMap 后:
- 使用該 ConfigMap 掛載的 Env 不會同步更新
- 使用該 ConfigMap 掛載的 Volume 中的數據需要一段時間(實測大概10秒)才能同步更新
ENV 是在容器啟動的時候注入的,啟動之后 kubernetes 就不會再改變環境變量的值,且同一個 namespace 中的 pod 的環境變量是不斷累加的,參考 Kubernetes中的服務發現與docker容器間的環境變量傳遞源碼探究。為了更新容器中使用 ConfigMap 掛載的配置,可以通過滾動更新 pod 的方式來強制重新掛載 ConfigMap,也可以在更新了 ConfigMap 后,先將副本數設置為 0,然后再擴容。
在kubernetes中,更新configMap后,pod是不會自動識別configMap中的變動。
configMap更新后,如果想使pod中引用configMap的變量生效,
通常簡單的做法是:
方法1. 刪除該pod,讓其自動產生一份新的pod.
方法2. 修改pod的配置,讓其自動產生一份新的pod.
方法3. 增加一個sidecar,讓其監控configMap的變化,來重啟pod.
原理就是:通過更新deployment中的Annotations,增加一個version的key,每次需要更新configMap,只要upgrade一次kustomization.yaml中的commonAnnotations->version的值,發布后,pod就會自動重建一次,以此來發現confiMap的新值。