问题描述
我有一个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
来做到这一点,但是我没有权限在正在使用jq
的服务器上安装kubectl
。
解决方法
您不能仅使用kubectl来执行此操作。但是还有其他方法。
您可以从official jq website下载静态链接的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"/'
,
您可以使用kubectl bulk
插件。以下命令将复制您的配置图
# get resource(s) and create with field(name) change
kubectl bulk configmap app-map -n app-space create name app-mapp-backup
Kubectl大量使用非常强大,我建议检查samples。