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

gmi*_*ile 6 persistence rename kubernetes google-kubernetes-engine

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


我正试图缓解一个"设备没有剩余空间"的问题,我只是偶然发现了.基本上我的计划要求我调整卷的大小,我的服务会保留其数据.

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

因此,我必须手动保存数据.我做了以下计划:

  1. 创造一个新的,更大容量的PVC,
  2. 创建一个临时容器,附加"受害者"pvc和一个新的更大的pvc,
  3. 复制数据,
  4. 丢弃"受害者"PVC,
  5. 重命名新的更大的pvc取代"受害者".

有问题的PVC附加到StatefulSet,因此旧名称和新名称必须匹配(因为StatefulSet期望遵循卷命名约定).

但我不明白如何重命名持久量声明.

aer*_*ite 8

你的问题的答案是否定的.没有办法在Kubernetes中更改任何元名称.

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

您希望通过旧的PersistentVolumeClaim 声明新的更大的PersistentVolume.

可以说,老PVC命名victim和新PVC命名bigger.您想声明biggervictimPVC 创建的PV .因为您的应用程序已经在使用victimPVC.

按照以下步骤进行操作.

第1步:删除旧PVC victim.

第2步:使PV bigger可用.

$ kubectl get pvc bigger
NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
bigger    Bound     pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6   10Gi       RWO            standard       30s
Run Code Online (Sandbox Code Playgroud)

编辑PV pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6以将persistentVolumeReclaimPolicy设置为Retain.因此删除PVC不会删除PV.

现在,删除PVC bigger.

$ 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
Run Code Online (Sandbox Code Playgroud)

查看状态,PV已发布.

现在,让这个PV可以被另一个PVC声称,我们的victim.

再次编辑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
Run Code Online (Sandbox Code Playgroud)

现在PV的状态是可用的.

步骤3:bigger通过victimPVC 声明PV

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: victim
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: pvc-8badc3c2-08c5-11e8-b07a-080027b3e1a6
  resources:
    requests:
      storage: 10Gi
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

最后:将persistentVolumeReclaimPolicy设置为Delete

这就是你的PVC victim拥有更大PV的方式.

  • 如果使用脚本编写而不是`kubectl edit` Patch permanentVolumeReclaimPolicy,则可以使用这两个补丁命令示例:`kubectl patch pv <name> -p "{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}"` 要删除的补丁spec.claimRef `kubectl patch pv <name> --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'` (4认同)

小智 6

使用 Kubernetes 1.11+,您可以通过简单地修改 PVC 的存储请求来执行按需调整大小(https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/)。

GKE 支持此功能(我自己已经使用过多次),并且非常简单且没有戏剧性。