如何在运行时编辑 Spring Boot kubernetes 应用程序中的 configmap 配置

hud*_*udi 9 java spring-boot kubernetes configmap

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Har*_*var 6

选项1

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

它是用于监控和管理 K8s 集群的 UI。使用它您还可以编辑配置映射。

选项:2

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

kubectl create configmap some-config \
  --from-file=some-key=some-config.yaml \
  -n some-namespace \
  -o yaml \
  --dry-run | kubectl apply -f - 
Run Code Online (Sandbox Code Playgroud)

选项:3

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

使用YAML helm 的Configmap

apiVersion: v1
kind: ConfigMap
metadata:
  name: jksconfig
data:
  config.json: |-
    {{ .Files.Get "config.json" | indent 4 }}
Run Code Online (Sandbox Code Playgroud)

选项:4

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

选项:5

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

#bin/bash
kubectl get configmap <configmap-name>  -o yaml > cofig.yaml
Run Code Online (Sandbox Code Playgroud)

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