为了能够修改Kubernetes对象,我们可以使用kubectl edit以交互方式进行修改。如果我们需要测试值,它可以派上用场,但它使自动化变得更加困难。如果我们需要一种使用非交互式命令更改Kubernetes对象的方法,kubectl patch是我们的最佳选择。
为了能够在脚本模式下修改Kubernetes对象,我们需要告诉kubectl我们要设置哪些字段。例如,如果我们想添加一个顶级条目,例如allowVolumeExpansion,以便能够调整EBS支持的PVC的大小:
$ kubectl get sc gp2 -o yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
(...)
name: gp2
parameters:
fsType: ext4
type: gp2
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
使用-p 选项定义 需要添加的对象
$ kubectl patch sc gp2 -p '{"allowVolumeExpansion": true}'
storageclass.storage.k8s.io/gp2 patched
如果需要修改具有更多级别的值,则必须将所有级别都包含到补丁中。例如,以下定义使用不同的spec.resources.requests.storage:
$ kubectl get pvc demopvc -o yaml
(...)
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
(...)
我们必须定义整个路径以达到我们想要更改的值:
$ kubectl patch pvc demopvc -p '{"spec": {"resources": {"requests": {"storage": "20Gi"}}}}'
persistentvolumeclaim/demopvc patched
再次使用kubectl get pvc检查对象,我们将能够看到它是如何成功修补的:
$ kubectl get pvc demopvc -o yaml
(...)
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
(...)
标签:kubectl,Kubernetes,...,storage,patch,gp2
From: https://www.cnblogs.com/faberbeta/p/16646362.html