最近我尝试在 PersistentVolumeClaim
的帮助下调整 Kubectl edit pvc
的大小以将存储从 10 Gi
增加到 70 Gi
但它给出了错误:
persistentvolumeclaims "myclaim" was not valid:
* spec: Forbidden: spec is iimmutable after creation except resources.requests for bound claims
如何在 Kubectl edit
的帮助下做到这一点而不会出错。Screen of error
最佳答案
我已经在支持 Dynamic Provisioning 的 GKE 测试集群上验证了这一点。正如我在评论中提到的,您正在尝试编辑 PersistentVolumeClaim 的 spec
部分,即 immutable
,但 resources.requests
除外。
但是,storage
字段路径是 spec.resources.requests.storage
,我对编辑它没有任何问题。当您使用 kubectl edit
作为默认值时,它使用 vi editor
控制可能很难/很容易打错字。我猜您不小心更改了示例中的 storage
(可能是 selectors
、 labels
中的错字)。
您始终可以使用其他编辑器,例如 nano
。KUBE_EDITOR="nano" kubectl edit pvc <pvc-name>
对于测试,我在 GKE 集群上使用了 This YAML。
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mongodb-pv-claim Bound pvc-802714bf-3922-4b41-b70f-97394f252a00 10Gi RWO standard 16s
除了 editing
资源,您还可以使用 patch resources 。kubectl patch pvc <pvc-name> -p '{"spec":{"resources":{"requests":{"storage":"70Gi"}}}}}'
$ kubectl patch pvc mongodb-pv-claim -p '{"spec":{"resources":{"requests":{"storage":"70Gi"}}}}}'
persistentvolumeclaim/mongodb-pv-claim patched
之后,如果您将描述 PVC
,您可以找到如下信息:Conditions:
Type Status LastProbeTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
FileSystemResizePending True Mon, 01 Jan 0001 00:00:00 +0000 Fri, 25 Sep 2020 06:40:17 +0000 Waiting for user to (re-)start a pod to finish
file system resize of volume on node.
过了一阵子:$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mongodb-pv-claim Bound pvc-802714bf-3922-4b41-b70f-97394f252a00 70Gi RWO standard 8m37s
请记住,根据错误消息,它仅适用于 bound claims
。如果
patch
或 edit with nano
对您不起作用,请提供您的 PVC
yaml。编辑
根据 OP 在答案下方的评论,创建支持 Dynamic Provisioning 的
storageclass
解决了这个问题。关于kubernetes - 使用 Kubectl 调整 Kubernetes 中 PVC 的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63965817/