我可以从外部文件获取configMap值吗?

问题描述

我已经定义了configMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
  labels:
    app: my-config
data:
  myConfiguration.json: |
    {
    "configKey": [
        {
          "key" : "value"
        },{
          "key" : "value"
        }
    }

这就是我在吊舱中使用它的方式:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: someimage
  name: someimage
spec:
  selector:
    matchLabels:
      app: someimage
  replicas: 1
  template:
    metadata:
      labels:
        app: someimage
    spec:
      containers:
        - image: someimage
          name: someimage
          command:
            - mb
            - --configfile
            - /configFolder/myConfig.json
          ports:
            - containerPort: 2525
          volumeMounts:
            - name: config-volume
              mountPath: /configFolder
      hostname: somehost
      restartPolicy: Always
      nodeSelector:
        beta.kubernetes.io/os: linux
      volumes:
        - name: config-volume
          configMap:
            name: my-config
            items:
              - key: myConfiguration.json
                path: myConfiguration.json

我的问题是:是否可以将myconfiguration的值(json字符串)保存在与configmap分开的单独文件中?为了保持干净?我该如何更改部署和configmap yaml定义,以便不必更改应用程序?

重要:我不能使用任何单独的模板工具。

谢谢

解决方法

可以!使用Kustomize。

Kustomize是1.14中引入的kubectl子命令,它具有许多功能,可帮助自定义您的部署。

为此,您必须使用ConfigMaps Generators。这将需要一个附加文件kustomization.yml

因此,如果您的部署yaml文件为deployment.yaml,而configMap的名称为my-config,则kustomization.yaml应该看起来像这样

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - deployment.yaml
configMapGenerator:
- name: my-config
  files:
  - myConfiguration.json
  - myConfiguration2.json # you can use multiple files

要运行kustomize,必须将kubectl apply-k选项一起使用。

编辑:Kustomize将ConfigMap的哈希值附加到它们的名称中。有了它,它将能够跟踪您的配置更改,并在更改时为您触发重新部署。

因此,只要您更改configMaps,就无需删除您的Pod。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...