kubernetes - 如何使 PersistentVolumeClaim 重新获得对动态配置的已发布 PersistentVolume 的访问权限
问题描述
我已经使用以下 k8s 资源文件从具有保留 reclaimPolicy 的自定义存储类动态创建/配置了 PVC 和 PV。
# StorageClass yaml spec
# kubectl apply -f storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
fstype: ext4
replication-type: none
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: Immediate
# PersistentVolumeClaim yaml specs
# kubectl apply -f mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: test-mysql
name: test-mysql-pv-claim
spec:
storageClassName: "fast-ssd"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 51G
以下是重现我的场景的步骤顺序:
ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl apply -f mysql-pvc.yaml
persistentvolumeclaim/test-mysql-pv-claim created
ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl get pvc,pv
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/test-mysql-pv-claim Bound pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616 48Gi RWO fast-ssd 7s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616 48Gi RWO Retain Bound default/test-mysql-pv-claim fast-ssd 6s
ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl delete -f mysql-pvc.yaml
persistentvolumeclaim "test-mysql-pv-claim" deleted
ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl get pvc,pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616 48Gi RWO Retain Released default/test-mysql-pv-claim fast-ssd 44s
ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntutest$ kubectl apply -f mysql-pvc.yaml
persistentvolumeclaim/test-mysql-pv-claim created
ubuntu@ubuntu-ThinkPad-X230-Tablet:/home/ubuntu/test$ kubectl get pvc,pv
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/test-mysql-pv-claim Bound pvc-fbc266ab-60b0-441b-a789-84f950071390 48Gi RWO fast-ssd 6m6s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-a6bd789c-9e3c-43c8-8604-2e91b2fee616 48Gi RWO Retain Released default/test-mysql-pv-claim fast-ssd 7m6s
persistentvolume/pvc-fbc266ab-60b0-441b-a789-84f950071390 48Gi RWO Retain Bound default/test-mysql-pv-claim fast-ssd 6m5s
正如我们从输出的最后一部分看到的,新 PVC 绑定到新 PV,而不是旧发布的 PV。
那么我们是否可以在 mysql-pvc.yaml 文件中进行一些更改,以便我们的 PVC 可以再次重新分配/绑定到旧版本 PV,因为该 PV 将包含我们需要的重要数据?
解决方案
当您的回收策略为“保留”时,pvc YAML 中的任何更改都将不起作用。
根据 Kubernetes 文档:
Retain 回收策略允许手动回收资源。
PersistentVolumeClaim
删除后,仍然PersistentVolume
存在,并且该卷被视为“已释放”。但它还不能用于另一个索赔,因为前一个索赔人的数据仍在卷上。管理员可以通过以下步骤手动回收卷。
- 删除
PersistentVolume
. 删除 PV 后,外部基础设施(例如 AWS EBS、GCE PD、Azure 磁盘或 Cinder 卷)中的关联存储资产仍然存在。 - 相应地手动清理相关存储资产上的数据。
- 手动删除关联的存储资产,或者如果您想重复使用相同的存储资产,
PersistentVolume
请使用存储资产定义创建一个新的。
参考: https ://kubernetes.io/docs/concepts/storage/persistent-volumes/#retain
推荐阅读
- c# - 单元测试中的模拟日志单例
- javascript - 不能用颜色选择器改变 css a:hover 的颜色?
- javascript - node.js - 同步事件监听器
- c++ - 使用递归从尾部开始反转链表
- php - 使用 utc 偏移量而不是时区名称创建带有时区的 ical
- oracle - 在 Oracle APEX 中处理 POST 请求 (JSON)
- c# - 从主程序在表单之间切换
- ios - 如何知道用户何时在 PDFKit 的 PDFView 中滑动到下一页?
- amazon-web-services - 如何将 Amazon S3 对象权限分配给特定的 IAM 组?
- asp.net - 在 C# 中将连续日志从一个应用程序发送到另一个应用程序