V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

求一个 patch configmap 的指令

  •  
  •   css3 · 2022-02-24 20:47:31 +08:00 · 1247 次点击
    这是一个创建于 992 天前的主题,其中的信息可能已经有所发展或是发生改变。
    # 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
    
    7 条回复    2022-02-25 13:05:58 +08:00
    ampedee
        1
    ampedee  
       2022-02-24 22:32:47 +08:00 via iPhone
    google 过好像是没有,插个眼
    wd
        2
    wd  
       2022-02-24 23:18:43 +08:00 via iPhone
    那个单独用 patch 无法做到,因为那个 json 是个整体,可以用的做法是先读出来,然后用 jq 改了,再写回去
    dayeye2006199
        3
    dayeye2006199  
       2022-02-25 01:15:34 +08:00 via Android
    kubectl edit
    SIGEV13
        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
    css3
        5
    css3  
    OP
       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
        6
    KaynW  
       2022-02-25 10:22:21 +08:00
    挂载上去是会更新的, 就是时效性和稳定性不保证
    wd
        7
    wd  
       2022-02-25 13:05:58 +08:00 via iPhone
    @css3 那肯定呀。我说的意思是把那个字符串拿出来 让 jq 解析那个字符串。不是解析 -o 输出的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1467 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:52 · PVG 07:52 · LAX 15:52 · JFK 18:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.