我有以下配置图
apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
application.properties: |+
key1: value1
key2: value2
keyN: valueNConfigmap已挂载到pod,并且工作正常。
我的要求是以编程方式替换某些键的值。我可以运行shell/python脚本,也可以运行任何kubectl命令。
发布于 2021-01-20 16:07:05
您可以使用kubectl patch命令更新K8s资源。
kubectl patch configmap/test \
--type=json \
'-p=[{"op": "replace","path": "/data/key1", "value": "test1"}]'正如Henry提到的那样,需要注意的重要一点是,应用程序还必须在属性更改后重新读取它们。
发布于 2021-01-20 19:50:25
您可以使用Bash脚本动态替换ConfigMaps中的某些键和值。
我已经创建了简单的bash脚本来演示它如何在我的kubeadm集群v1.20上工作:
#!/bin/bash
keyName="key1"
value="value100"
read -p 'Enter ConfigMap name: ' configmapName
if kubectl get cm ${configmapName} 1> /dev/null 2>&1; then
echo "ConfigMap name to modify: ${configmapName}"
else
echo "ERROR: bad ConfigMap name"
exit 1
fi
kubectl patch cm ${configmapName} -p "{\"data\":{\"${keyName}\":\"${value}\"}}"在上面的示例中,您需要传递ConfigMap名称并设置您想要修改的内容。
此外,您可能希望以类似于configmapName值的方式将keyName和value值作为命令行参数进行传递。
您可以看到上述脚本如何工作的示例:
root@kmaster:~# ./replaceValue.sh
Enter ConfigMap name: test
ConfigMap name to modify: test
configmap/test patched
root@kmaster:~# kubectl describe cm test
Name: test
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
application.properties:
----
key1:
----
value100
key2:
----
value2
keyN:
----
valueN
Events: <none>
root@kmaster:~# 注意:如果你想用kubectl replace代替kubectl patch,你可以使用下面的命令(例如sourceValue="key1: value1"和destinationValue="key1: value100")
kubectl get cm ${configmapName} -o yaml | sed "s/${sourceValue}/${destinationValue}/" | kubectl replace -f -https://stackoverflow.com/questions/65805148
复制相似问题