有部署可能使用名稱爲cm-myapp-*
的名稱的配置圖。如何編寫一個查看所有部署的腳本,並將其從cm-myapp-*
的一些cm-myapp-*
重新配置到新的特定cm-myapp-123
?如何使用腳本更改部署的ConfigMap?
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
命令接受轉發模板,但它們不用於編輯。轉儲整個配置會給一些多餘的字段。
可以提取一些東西:
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返回的配置有其他字段,我不舒服的應用。 – Velkan
我試圖做同樣的事情,發現'patch'不能在同一個文件中使用多個資源。如果你將它們分成不同的文件,你應該可以使用'patch'。 –