求一个 patch configmap 的指令

2022-02-24 20:47:31 +08:00
 css3
# 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命令将上面加注释的 2patch 更新,只求个命令行处理,不采用交互指令如edit

顺带再请教下,pod中按以下方式使用的configmappatch configmap后,可以不删除pod就更新配置吗?

  volumes:
  - configMap:
      name: debug-config
    name: debug-config
1252 次点击
所在节点    程序员
7 条回复
ampedee
2022-02-24 22:32:47 +08:00
google 过好像是没有,插个眼
wd
2022-02-24 23:18:43 +08:00
那个单独用 patch 无法做到,因为那个 json 是个整体,可以用的做法是先读出来,然后用 jq 改了,再写回去
dayeye2006199
2022-02-25 01:15:34 +08:00
kubectl edit
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
css3
2022-02-25 09:22:33 +08:00
@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 导致
KaynW
2022-02-25 10:22:21 +08:00
挂载上去是会更新的, 就是时效性和稳定性不保证
wd
2022-02-25 13:05:58 +08:00
@css3 那肯定呀。我说的意思是把那个字符串拿出来 让 jq 解析那个字符串。不是解析 -o 输出的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/836252

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX