【发布时间】:2018-03-24 06:41:03
【问题描述】:
有些部署可能使用名称类似于cm-myapp-* 的配置映射。如何编写一个脚本来查看所有部署并将它们从使用它们的一些 cm-myapp-* 重新配置为新的特定 cm-myapp-123?
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:2
volumeMounts:
- name: config-volume
mountPath: /etc/myapp/
volumes:
- name: config-volume
configMap:
name: cm-myapp-9375546193
---
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-myapp-123
data:
myapp.conf: |
hi
kubectl patch 接受“JSON 补丁”,kubectl edit 看起来像仅交互。一些 kubectl 命令接受 go-templates,但它们不用于编辑。转储整个配置会提供一些多余的字段。
可以提取一些东西:
kubectl get deployment -o go-template --template="{{range .items}}{{\$deploymentName := .metadata.name}}{{range .spec.template.spec.volumes}}{{if .configMap}}{{\$deploymentName}} {{.configMap}}:{{end}}{{end}}{{end}}" | tr ':' '\n'
kubectl get deployment myapp -ojsonpath="{.spec.template.spec.volumes[0].configMap.name}}"
需要修补它(不工作):
kubectl patch deployment myapp -p '{ "op": "replace", "path": ".spec.template.spec.volumes[0].name", "value": "cf" }'
那么怎么做呢? kubectl patch的语法是什么?
【问题讨论】:
-
echo "xx: cm-my-app-*" | sed s/cm-my-app-[*]/cm-my-app-123/? -
@mh-cbon,Kubernetes 返回的配置有其他我不习惯应用的字段。
-
我尝试做同样的事情,发现
patch不适用于同一个文件中的多个资源。如果您将它们拆分为单独的文件,您应该可以使用patch。 -
@TaylorWood,没关系,使用
kubectl patch时没有文件。
标签: json go kubernetes