我有一个configMap,我想使用最后一个应用的配置来创建一个备份configMap。
我使用以下命令来获取最后应用的配置:
kubectl get cm app-map -n app-space
-o go-template
--template='{{index .metadata "annotations" "kubectl.kubernetes.io/last-applied-configuration"}}' > backup.json
它返回如下内容[backup.json]:
{"kind":"ConfigMap","apiVersion":"v1","metadata":{"name":"app-map","creationTimestamp":null},"data":{"app.yml":"xxxxxxxxx","config.yml":"yyyyyyyyy"}}
现在,我希望我的备份configMap有一个不同的名称。因此,我想将.metadata.name
从app-map
更改为app-map-backup
。
有没有办法用kubectl
和-o go-template
来实现这一点?在将名称写入backup.json
文件之前,我想更改名称。
我知道我可以使用jq
做到这一点,但我没有在使用kubectl
的服务器上安装jq
的权限。
您可以使用kubectl bulk
插件。下面的命令将复制您的配置映射
# get resource(s) and create with field(name) change
kubectl bulk configmap app-map -n app-space create name app-mapp-backup
Kuectl散装使用非常强大,我建议检查样品。
您不能仅使用kubectl来完成此操作。但还有其他方法。
您可以从jq官方网站下载静态链接的jq二进制文件:
wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
chmod +x jq-linux64
然后你可以像下面这样使用这个二进制文件:
kubectl -o go-template [...] | ./jq-linux64 ...
或者您可以使用sed
:
kubectl -o go-template [...] | sed 's/"name":"app-map"/"name":"app-map-backup"/'