【问题标题】:How to edit configmap configuration in spring boot kubernetes application during runtime如何在运行时在 Spring Boot Kubernetes 应用程序中编辑 configmap 配置
【发布时间】:2022-01-12 14:51:28
【问题描述】:

我们有配置庞大的应用程序(这只是一部分):

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app
data:
  application.yaml: |-
    config:
      app: MY-APP
      my-custom-map:
        KEY1: value1
        KEY2: value2
        KEY3: value3
        KEY4: value4
      something1: true
      something2: 123
      something3: string123
      something4: null
      subclass:
        anotherMap:
          "[AAA:0.0.1,BBB:CCC]": "DDD:EEEE"
      subclass2:
        something4: AAAA
        anotherMap2:
          0.0.3: 0.0.3

我按照this 示例将 configmap 与 spring boot 配置绑定,但仍然存在一些问题,例如如何解决 yaml 中的 null 问题,spring yaml 后处理器将其解析为空字符串:issue

第二个问题是如何处理这个 configmap。我知道我可以编辑然后使用 apply 但这可能会导致一些错误。是否有一些工具可以用来编辑这个 yaml 并制作一些用于编辑的 bash 脚本?像: ./my-script.sh -function addMyCustomMapValue -args "KEY5:value5" 。我尝试探索yq,但我认为存在一些限制,并且很难用于某些用例,然后kustomize 我认为这对于创建配置映射很有用,但不适用于编辑现有配置映射。

这个用例已经有一些很好的例子了吗?

【问题讨论】:

    标签: java spring-boot kubernetes configmap


    【解决方案1】:

    选项:1

    您可以使用镜头:https://k8slens.dev/kubernetes.html

    它是用于监控和管理 K8s 集群的 UI。使用它,您还可以编辑 configmap。

    选项:2

    您可以将所有 Key 值管理到单个 YAML 文件中并从文件中创建配置映射:

    kubectl create configmap some-config \
      --from-file=some-key=some-config.yaml \
      -n some-namespace \
      -o yaml \
      --dry-run | kubectl apply -f - 
    

    选项:3

    使用helmvalues.yaml 模板创建图表并进一步应用。

    Configmap 使用 YAML helm

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: jksconfig
    data:
      config.json: |-
        {{ .Files.Get "config.json" | indent 4 }}
    

    选项:4

    如果您使用 configmap 作为环境或将其注入文件路径,您也可以使用 Hashi corp vault:https://www.vaultproject.io/

    选项:5

    正如您所建议的,您可以创建一个 Bash 脚本,它将现有的正在运行的 Configmap 导出到一个新的 YAML 文件中手动编辑 YAML。您可以将更改应用到 K8s 集群。

    #bin/bash
    kubectl get configmap <configmap-name>  -o yaml > cofig.yaml
    

    您还可以查看:https://github.com/Gallore/yaml_cli 可能会有所帮助。

    【讨论】:

    • 由于截止日期,我现在没有时间探索所有选项,但我认为你应该得到赏金。我们稍后会尝试很多
    • 非常感谢,hudi。如果您在尝试时遇到任何问题,请随时评论。
    【解决方案2】:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: application-conf
    data: 
      {{- if .Values.global.applicationConfiguration }}
      application.properties: | 
        {{- .Values.global.applicationConfiguration  | nindent 4 }}
       {{- end }}
    

    这就是我们可以指定配置映射的方式。如果指定了 applicationConfiguration 在你的 values.yaml 中添加,那么只有它会在外部写入 application.properties。它不需要具有所有属性。

    【讨论】:

      【解决方案3】:

      这是在 kubernetes 环境中编辑和更改的最佳工具

      k9s : https://github.com/derailed/k9s

      您可以探索https://kubeval.instrumenta.dev/ 以在部署之前捕获任何配置映射错误

      【讨论】:

      • 你怎么知道它是最好的工具?
      猜你喜欢
      • 2021-10-24
      • 2022-01-11
      • 2021-09-08
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2016-08-26
      相关资源
      最近更新 更多