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

How to edit configmap configuration in spring boot kubernetes application during runtime

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

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 example to bind configmap with spring boot configuration but there is still some problem for example how to solve null in yaml which spring yaml postprocessor resolve as empty string: issue

第二个问题是如何处理这个configmap。我知道我可以编辑然后使用应用,但这可能会导致一些错误。有没有我可以用来编辑这个 yaml 并制作一些 bash 脚本进行编辑的工具?喜欢: ./my-script.sh -function addMyCustomMapValue -args "KEY5:value5" 。我尝试探索 yq but I think there is some limitation and it is hard to use for some use-case and then kustomize,我认为这对创建 configmap 很有用,但不适合编辑现有的 configmap。

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

选项:1

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

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

选项:2

您可以将所有键值管理到单个 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 可能会有帮助。

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

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

您可以探索 https://kubeval.instrumenta.dev/ 以在部署前捕获任何 configmap 错误

apiVersion: v1
kind: ConfigMap
metadata:
  name: application-conf
data: 
  {{- if .Values.global.applicationConfiguration }}
  application.properties: | 
    {{- .Values.global.applicationConfiguration  | nindent 4 }}
   {{- end }}

这就是我们指定配置映射的方式。在您的 values.yaml 中添加 applicationConfiguration 如果指定,则只有它会在外部写入 [​​=12=]。它不需要具备所有属性。