使用 Kustomize 处理 ConfigMap 时需要注意的事项

思考configMapGenerator的运作方式

现在,在kustomize中处理ConfigMap有两种方法,
由于kustomize的configMapGenerator行为有些特殊,
我将简要总结一下。

太长不看

随便地

    基本的にはconfigMapGeneratorを使おう

如果每次编辑configMap时确保将configMap更改为不同的名称,可以编写configMapGenerator。

如果在对configMap进行更新时,如果名字发生变化会造成困扰,那么同样将configMap写入resources中。

前提 tí)

    • kustomization.yaml

 

    • deployment.yaml

 

    configmap

在Kubernetes中,将deployment和configMap作为最小配置来考虑。

观察两种方法的差异

resources の中に書いてresourceとして処理する
kustomization.yaml にconfigMapGeneratorとして書く

我们将从这里开始看两种方法的区别。
假设 deployment 的清单 deployment.yaml 的内容完全相同。

部署.yaml

# 余計なものを省いています
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: api
  labels:
    app: api
spec:
  template:
    spec:
      containers:
      - name: api
        envFrom:
        - configMapRef:
            name: awesome-config

这是读取基本的 awesome-config 的清单。

使用资源

kustomization.yaml、deployment.yaml、config.yaml 这三个文件

自定义化配置.yaml

resources:
- ./deployment.yaml
- ./config.yaml

配置文件.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: awesome-config
data:
  foo: a
  bar: b
  baz: c

自定義生成的結果

# (一部省略)
apiVersion: v1
data:
  bar: b
  baz: c
  foo: a
kind: ConfigMap
metadata:
  name: awesome-config
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: api
spec:
  template:
    spec:
      containers:
      - envFrom:
        - configMapRef:
            name: awesome-config # !!!ここに注目!!!

值得关注的是

config.yamlを更新してを再び
$ kustomization build

configMapRefで参照しているconfigmap nameは更新されないこと!!!

不管configMap的更新如何,使用resources时总是引用相同的名称。

使用configMapGenerator

自定义化.yaml

resources:
- ./deployment.yaml

# resourcesにconfig.yamlを書かない
configMapGenerator:
- name: awesome-config
  literals:
    - foo=a
    - bar=b
    - baz=c

自定义生成结果

# (一部省略)
apiVersion: v1
data:
  bar: b
  baz: c
  foo: a
kind: ConfigMap
metadata:
  creationTimestamp: null # できてる
  name: awesome-config-cf7cgck6mg
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: api
  name: api
spec:
  template:
    spec:
      containers:                       
      - envFrom:
        - configMapRef:
            name: awesome-config-cf7cgck6mg # !!!ここに注目!!!

值得关注的是

Deploymentが参照している configMapRef.nameが更新されたこと!!!
その後、configMapの内容を書き換えて kustomize buikdを行うとhashが更新された!!!!

> name: awesome-config-tm49dhk965

总结

在kustomize环境下,有两种处理configMap的方法,根据目的选择合适的方法似乎是一个好主意。

但是,在大多数情况下,我认为configMapGenerator是最好的选择。

如果希望确保利用的deployment能够可靠地重新启动,请使用configMapGenerator方法。

如果不想重新启动,可以通过挂载卷并监视configmap的更改来实现(可能会使用prometheus作为sidecar)。

广告
将在 10 秒后关闭
bannerAds