动态更新configmap值



我有以下configmaps

apiVersion: v1
kind: ConfigMap
metadata:
name: test
data:
application.properties: |+
key1: value1
key2: value2
keyN: valueN

Configmaps被挂载到pod并且工作正常

我的要求是以编程方式替换一些键的值。我可以运行shell/python脚本,我可以运行任何kubectl命令。

可以使用kubectl patch命令更新K8s资源。

kubectl patch configmap/test 
--type=json 
'-p=[{"op": "replace","path": "/data/key1", "value": "test1"}]'
Henry提到的一个重要的注意点是,应用程序还必须在属性被更改后重新读取它们。

您可以使用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}"}}"

在上面的示例中,您需要传递ConfigMapname并设置要修改的内容。
此外,您可能希望以类似于configmapName值的方式将keyNamevalue值作为命令行参数传递。


你可以看到上面的脚本是如何工作的一个例子:
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 -

相关内容

  • 没有找到相关文章

最新更新