如何在运行时编辑 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
使用 helm
和 values.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=]。它不需要具备所有属性。
我们有配置庞大的应用程序(这只是一部分):
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
使用 helm
和 values.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=]。它不需要具备所有属性。