Kubernetes Kubectl更新配置图
我正在使用以下命令创建configMapKubernetes Kubectl更新配置图,kubernetes,Kubernetes,我正在使用以下命令创建configMap kubectl create configmap test --from-file=./application.properties --from-file=./mongo.properties --from-file=./logback.xml 现在,我修改了mongo.properties中的一个键的值,我需要在kubernetes中更新它 选项1:- kubectl edit test 在这里,它打开整个文件。但是,我只想更新mongo.pr
kubectl create configmap test --from-file=./application.properties --from-file=./mongo.properties --from-file=./logback.xml
现在,我修改了mongo.properties中的一个键的值,我需要在kubernetes中更新它
选项1:-
kubectl edit test
在这里,它打开整个文件。但是,我只想更新mongo.properties,因此只想看到mongo.properties。还有别的办法吗
注意:-我不想在单独的configMap中包含mongo.properties
kubectl create configmap test --from-file=./application.properties --from-file=./mongo.properties --from-file=./logback.xml
谢谢不,你不能
kubernetes中的Replace将简单地替换该配置映射中的所有内容。不能只更新一个文件或其中的一个属性
但是,如果您使用客户端Api进行检查,就会发现您是否创建了包含大量文件的configmap。然后,这些文件将存储为HashMap,其中key是默认的文件名,value是编码为字符串的文件内容。因此,您可以基于HashMap中现有的键值对编写自己的函数
这是我到目前为止发现的,如果您发现已有解决此问题的方法,请让我知道:)
仅供参考,如果您只想更新一个或几个属性,可以使用补丁。然而,它有点难以实现
并且可能有帮助另一个选项实际上是您可以使用此命令: kubectl create configmap some-config --from-file=some-key=some-config.yaml -n some-namespace -o yaml --dry-run | kubectl apply -f - kubectl create configmap some config--from file=some key=some-config.yaml-n some namespace-o yaml--dry run | kubectl apply-f-
请参阅Github问题:以下是如何在jq的帮助下在configmap中添加/修改/删除文件: 将configmap导出到JSON文件:
CM_FILE=$(mktemp -d)/config-map.json
oc get cm <configmap name> -o json > $CM_FILE
DATA_FILES_DIR=$(mktemp -d)
files=$(cat $CM_FILE | jq '.data' | jq -r 'keys[]')
for k in $files; do
name=".data[\"$k\"]"
cat $CM_FILE | jq -r $name > $DATA_FILES_DIR/$k;
done
现在你可以了。只需在命令行上抛出:
kubectl edit configmap
。然后您可以编辑您的配置。kubectl edit configmap-n-o yaml
这将打开一个vim编辑器,其中configmap采用yaml格式。现在只需编辑并保存它。下面是一个完整的shell脚本,用于根据@Bruce S.answer将新文件添加到configmap(或替换现有文件)
#/bin/bash
#需要安装jq
如果[-z“$1”]
然后
echo“用法:update-config-map.sh”
返回
fi
如果[-z“$2”]
然后
echo“用法:update-config-map.sh”
返回
fi
CM_文件=$(mktemp-d)/config-map.json
kubectl获取cm$1-o json>$cm\u文件
数据文件目录=$(mktemp-d)
files=$(cat$CM_FILE | jq'.data'| jq-r'键[])
对于k,在$file中;做
name=“.data[\“$k\”]”
cat$CM_文件| jq-r$name>$DATA_文件_DIR/$k;
完成
echo cunfigmap:$CM\u文件tempdir:$DATA\u文件\u目录
echo将把文件$2添加到配置中
cp$2$数据\u文件\u目录
kubectl创建configmap$1--从文件$DATA_FILES_DIR-o yaml--干运行| kubectl apply-f-
回音完成
回波消除温度指令
rm-rf$CM\u文件
rm-rf$数据\u文件\u目录
这里有一种从脚本执行就地更新的简洁方法
想法是
kubectl get cm-o YAML
)sed
命令行将旧值替换为新值(sed“s”from | to“
)kubectl apply
$ kubectl get cm common-config -o yaml
apiVersion: v1
data:
CR_COMMON_LOG_LEVEL: info
kind: ConfigMap
第2步,使用sed
,使用正则表达式搜索和替换在本地对其进行修改:
$ kubectl get cm common-config -o yaml | \
sed -e 's|CR_COMMON_LOG_LEVEL: info|CR_COMMON_LOG_LEVEL: warn|'
apiVersion: v1
data:
CR_COMMON_LOG_LEVEL: warn
kind: ConfigMap
您可以看到该值已更改。让我们把它推回集群
$ kubectl get cm common-config -o yaml | \
sed -e 's|CR_COMMON_LOG_LEVEL: info|CR_COMMON_LOG_LEVEL: warn|' | \
kubectl apply -f -
configmap/common-config configured
步骤3;使用kubectl apply-f-
,它告诉kubectl从stdin读取数据并将其应用到集群
$ kubectl get cm common-config -o yaml | \
sed -e 's|CR_COMMON_LOG_LEVEL: info|CR_COMMON_LOG_LEVEL: warn|' | \
kubectl apply -f -
configmap/common-config configured
答案是肯定的,你是对的。。这是我这边的一个打字错误。。打开编辑器的是
kubectl edit
,感谢您指出@3H4x4x它也可能无法打开vim,这取决于环境变量editor
,您设置了一个完美的单行命令,它可以像一个符咒一样工作!非常感谢。如果您想在影响部署时自动应用新的configmap,可以使用“kubectl卷展栏重新启动部署(部署名称)”进行扩展,例如+1这适用于小型configmap,但不适用于大型configmap。。。失败原因是配置映射“xx”无效:元数据。批注:太长:最多只能包含262144个字符
。你知道解决这个问题的方法吗?@srinivas我最终只是从头开始删除并重新创建configmap。有效:)@More,我尝试了超过262144个字符,它与上面的命令一起工作。使用的命令-kubectl create cm${applicationconfigmap}--namespace{.Release.namespace}--from file=key1.yml=/tmp/key1-backup.yaml-o yaml--dry run | kubectl apply-f-Use apply的服务器端参数dry run | kubectl apply..
line是我所需要的,感谢您的帮助,例如kubectl创建机密的通用机密--从env file=secrets.env-o yaml--dry run=client | kubectl apply-f-
$ kubectl get cm common-config -o yaml
apiVersion: v1
data:
CR_COMMON_LOG_LEVEL: info
kind: ConfigMap
$ kubectl get cm common-config -o yaml | \
sed -e 's|CR_COMMON_LOG_LEVEL: info|CR_COMMON_LOG_LEVEL: warn|'
apiVersion: v1
data:
CR_COMMON_LOG_LEVEL: warn
kind: ConfigMap
$ kubectl get cm common-config -o yaml | \
sed -e 's|CR_COMMON_LOG_LEVEL: info|CR_COMMON_LOG_LEVEL: warn|' | \
kubectl apply -f -
configmap/common-config configured