Kubernetes 如何重命名持久性卷声明?

Kubernetes 如何重命名持久性卷声明?,kubernetes,persistence,rename,google-kubernetes-engine,Kubernetes,Persistence,Rename,Google Kubernetes Engine,可以重命名PVC吗?我似乎找不到可能的证据 我正试图缓解我刚刚偶然发现的“设备空间不足”的问题。基本上,我的计划要求我调整卷的大小,我的服务将数据保存在卷上 不幸的是,我仍然在GKE上使用Kubernetes 1.8.6。它没有启用准入插件: 1.9.1: 1.8.6: 因此,我必须尝试手动保存数据。我制定了以下计划: 创建新的、更大容量的PVC 创建一个带有“受害者”pvc和新的更大pvc的临时容器 复制数据 丢弃“受害者”PVC 重新命名新的更大pvc以代替“受害者” 所讨论的PVC附

可以重命名PVC吗?我似乎找不到可能的证据


我正试图缓解我刚刚偶然发现的“设备空间不足”的问题。基本上,我的计划要求我调整卷的大小,我的服务将数据保存在卷上

不幸的是,我仍然在GKE上使用Kubernetes 1.8.6。它没有启用准入插件:

  • 1.9.1:
  • 1.8.6:
因此,我必须尝试手动保存数据。我制定了以下计划:

  • 创建新的、更大容量的PVC
  • 创建一个带有“受害者”pvc和新的更大pvc的临时容器
  • 复制数据
  • 丢弃“受害者”PVC
  • 重新命名新的更大pvc以代替“受害者”
  • 所讨论的PVC附加到StatefulSet,因此新旧名称必须匹配(正如StatefulSet期望遵循卷命名约定)


    但我不知道如何重命名持久卷声明。

    我无法验证这一点,但我相当确定,对于GKE,您可以在谷歌云控制台中找到PV使用的磁盘,并在那里调整其大小。完成后,您应该能够登录到其连接的节点,并在设备上运行
    resize2fs
    。这是肮脏的,但可以肯定的是,这在过去曾经对我起过作用


    您无需卸载或复制即可执行此操作,如果磁盘处于活动状态或较大,则可以节省您的时间。

    您的问题的答案是否。在Kubernetes中无法更改任何元名称

    但是,有一种方法可以满足您的要求

    您想通过旧的PersistentVolumeClaim申请新的更大的PersistentVolume

    比如说,旧PVC名为
    受害者
    ,新PVC名为
    更大
    。您想申请由
    受害者
    PVC为
    biger
    创建的PV。因为您的应用程序已经在使用
    vice
    PVC

    按照以下步骤进行破解

    步骤1:删除您的旧PVC
    受害者

    步骤2:使
    的PV更大
    可用

    $ kubectl get pvc bigger
    NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    bigger    Bound     pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            standard       30s
    
    编辑PV
    pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6
    以将PersistentVolumeClaimplicy设置为
    Retain
    。因此,删除PVC不会删除PV

    现在,删除PVC
    biger

    $ kubectl delete pvc bigger
    
    $ kubectl get pv
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM            STORAGECLASS   REASON    AGE
    pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            Retain           Released   default/bigger   standard                 3m
    
    查看状态,PV已释放

    现在,让另一名PVC,即我们的
    受害者
    申请该PV

    再次编辑PV以删除claimRef

    $ kubectl edit pv pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6
    
    $ kubectl get pv
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
    pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            Retain           Available             standard                 6m
    
    现在PV的状态可用

    第3步:索赔
    biger
    PV by
    受害者
    PVC

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: victim
    spec:
      accessModes:
        - ReadWriteOnce
      volumeName: pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6
      resources:
        requests:
          storage: 10Gi
    
    使用volumeName
    pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6

    kubectl get pvc,pv
    NAME         STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc/victim   Bound     pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            standard       9s
    
    NAME                                          CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM            STORAGECLASS   REASON    AGE
    pv/pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            Retain           Bound     default/victim   standard                 9m
    
    最后:将persistentVolumeClaImpolicy设置为
    Delete


    这就是为什么您的PVC
    受害者的PV更大。

    使用Kubernetes 1.11+您只需修改PVC的存储请求即可按需调整大小()


    GKE支持这一点(我自己使用过好几次),它非常简单,没有戏剧性。

    我刚刚意识到我搞砸了。我不需要重命名任何东西。复制数据后,我将删除并重新创建受害者。检查我的答案。会有帮助吗?嗨。。你解决问题了吗?嗨,德里克!我可以调整磁盘大小,没有问题。我想做的是调整持久卷声明的大小,但该功能在我的Kubernetes版本中不可用。为了解决这个问题,我决定采用数据“复制”解决方案。它要求我重新命名其中一个PVC。但这似乎是不可能的……哦,对不起,我一定是完全错过了这一切中的
    C
    。我知道调整持久卷的大小对我来说是一件麻烦事,因为在某些云中它不是自动的。嗨,很抱歉反应太晚。我还没有机会尝试你的解决方案,但只要看看它,它似乎是合法的!我不知道你能用
    PV
    玩这样的把戏。非常感谢。您好@Mir我遵循了这些步骤,我可以确认它们工作正常。您知道在删除PVC时是否可以使用
    --cascade=false
    ,以防止其删除PV?我知道这在删除一个StatefulSet时起作用,不删除pod,但不确定它是否也适用于pvc。这将使过程更容易。