# kubectl get configmap myconfig -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: debug-config
data:
debug.json: |-
{
"portServiceDMS": 500,
"Buggdse": {
"Status": false
},
"GHInterval": {
"Start": 5062,
"End": 6000
},
"LOPFdFhd": false,
"CHF": {
"DriverName": "mysql"
},
"Paralbac": {
"LoginURL": "https://127.0.0.1:7788",
"Sources": [
{
"ServiceName": "Hopyyu",
"Status": false,
"ServiceURL": "https://127.0.0.1:9090/ft/test"
},
{
"SourceName": "Bgudreg",
"Status": false, # 需要修改这里为 true
"ServiceURL": "https://127.0.0.1:9090" # 需要修改这里为 "https://192.168.123.177:9090"
}
]
}
}
请教下各位,如何使用 kubectl patch
命令将上面加注释的 2
行 patch
更新,只求个命令行处理,不采用交互指令如edit
顺带再请教下,pod
中按以下方式使用的configmap
, patch configmap
后,可以不删除pod
就更新配置吗?
volumes:
- configMap:
name: debug-config
name: debug-config
1
ampedee 2022-02-24 22:32:47 +08:00 via iPhone
google 过好像是没有,插个眼
|
2
wd 2022-02-24 23:18:43 +08:00 via iPhone
那个单独用 patch 无法做到,因为那个 json 是个整体,可以用的做法是先读出来,然后用 jq 改了,再写回去
|
3
dayeye2006199 2022-02-25 01:15:34 +08:00 via Android
kubectl edit
|
4
SIGEV13 2022-02-25 01:20:43 +08:00
configmap 是作为整体更新的,按照 2 楼的方法修改就好。
更新的 configmap 会自动更新已经 mount 的 volume 。可以不新建 pod 也能看到更新。 https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-pod-configmap/#%E6%8C%82%E8%BD%BD%E7%9A%84-configmap-%E5%B0%86%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0 |
5
css3 OP @wd 最后也尝试这样搞,但看上去 jq 最多只能解析到 debug.json, 里边的内容无法按 key 解析
kubectl get cm configmap myconfig -o json | jq '.data["debug.json"]' | # 可以拿到 debug.json 整体: "{\n \"portServiceDMS\": 500, \n \"Buggdse\": {\n \"Status\": false\n }............\n}", 再往下 jq 就解析不了了: kubectl get cm configmap myconfig -o json | jq '.data["debug.json"]' | jq '. Paralbac' # jq: error (at <stdin>:1): Cannot index string with string "Paralbac" 看上去还是因为 debug.json 不是一个正确的 json 导致 |
6
KaynW 2022-02-25 10:22:21 +08:00
挂载上去是会更新的, 就是时效性和稳定性不保证
|