使用Kubectl在Kubernetes中调整PVC大小

问题描述

最近,我尝试在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测试群集上对此进行了验证。正如我在评论中提到的那样,您正在尝试编辑spec的{​​{3}}的immutable部分,除了resources.requests

但是,storage字段路径是spec.resources.requests.storage,我对此进行编辑没有任何问题。当您默认使用kubectl edit时,它使用的是vi editor,这可能很难控制/对于错字很容易。我想您不小心更改了示例中的storage(可能是selectorslabels中的错字)。

您始终可以使用其他编辑器,例如nanoKUBE_EDITOR="nano" kubectl edit pvc <pvc-name>

为了进行测试,我已经在GKE群集上使用了PersistentVolumeClaim

$ 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

您也可以This YAML来代替editing资源。

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起作用。

如果patchedit with nano对您不起作用,请提供您的PVC字母。

编辑

根据OP在以下答案中的评论,创建支持patch resourcesstorageclass解决了此问题。