如何使用 kubectl patch 命令更新此 configmap,而不使用 kubectl edit 命令

How to update this configmap with kubectl patch command, without kubectl edit command

下面是一个k8sconfigmap的配置,需要用kubectl patch命令更新,不知道怎么办

# kubectl get configmap myconfig -o yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: debug-config
data:
  config.json: |-
    {
        "portServiceDMS": 500,
        "Buggdse": {
            "Enable": 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, # need to patch here to true
                    "ServiceURL": "https://127.0.0.1:9090"  # need to patch here to  "https://192.168.123.177:45663"
                }
            ]
        }
    }

我在 google 网站上搜索了类似的方法来处理 ,但它不起作用

这个命令我试过了,还是不行:

kubectl get cm myconfig -o json | jq -r '.data."config.json".Paralbac.Sources[1]={"SourceName": "Bgudreg", "Status": true, "ServiceURL": "https://192.168.123.177:45663"}' | kubectl apply -f -

我把命令缩减到这里:

kubectl get cm myconfig -o json | jq -r '.data."config.json" # it works (The double quotes are for escaping the dot)

kubectl get cm myconfig -o json | jq -r '.data."config.json".Paralbac # it can't work:   jq: error (at <stdin>:18): Cannot index string with string "Paralbac"


所以,我认为我当前的问题是如何在 jq

中的 escaped 个符号之后继续工作

以下是更新问题中的 ConfigMap 的方法:

myconfig=$(mktemp) \
  && kubectl get configmap debug-config -o jsonpath='{.data.config\.json}' \
  | jq '.Paralbac.Sources[1].Status = true' \
  | jq '.Paralbac.Sources[1].ServiceURL = "https://192.168.123.177:45663"' > myconfig \
  && kubectl create configmap debug-config --from-file=config.json=myconfig --dry-run=client -o yaml | kubectl replace -f - \
  && rm myconfig

现在 kubectl get configmap debug-config -o jsonpath='{.data.config\.json}' | jq 会在 ConfigMap 中显示更新后的 config.json