如何在 Longhorn 中保留 PersistenceVolume
How can I retain a PersistenceVolume in Longhorn
我已经设置了一个自我管理的 kubernetes 集群以及 longhorn 作为分布式存储。安装非常简单。
我创建了一个像这样的存储 class:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn
annotations:
# make this class the default storage class
storageclass.kubernetes.io/is-default-class: "true"
provisioner: driver.longhorn.io
reclaimPolicy: Retain
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 hours in minutes
fromBackup: ""
我可以创建新的 PersistenceVolume 并将其绑定到我的 pod(例如 postgres 服务器),现在可以轻松定义 PersistenceVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: appdata
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
现在,在部署 Pod 后,我可以看到创建了一个 PV(当然它正在运行)
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-803d3061-457c-4023-9864-636c7a3f626a 2Gi RWO Retain Bound default/dbdata longhorn 10d
当我删除我的 postgreSQL pod 时,由于 'Retain' 政策,我的 PV 仍然存在。但是当我再次重新创建我的 pod 时,会创建一个新的 PersistenceVolume。所以现在我有两个:
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-803d3061-457c-4023-9864-636c7a3f626a 2Gi RWO Retain Released default/dbdata longhorn 10d
pvc-9385b1ad-4c06-4bf2-b595-db6681334c3d 2Gi RWO Retain Bound default/dbdata longhorn 10d
到目前为止我不明白的是 - 这是我的问题 - 我如何 create/claim 具有自定义名称(没有随机 UUID)的 PersistenceVolume。我怎样才能告诉我的 POD 重用这个 PV?或者以另一种方式问:我如何告诉 longhorn 创建一个具有给定名称而不是随机 UUID 的 PersistenceVolume?
删除PVC时,对应的PV变为Released。这个 PV 通常包含敏感数据,这就是为什么不可能绑定到它的原因,即使它是一个 PVC,与前一个具有相同的名称和相同的命名空间 - 谁知道谁在试图窃取数据!
此处需要管理员干预。有两个选项:
- 让每个人都可以使用 PV - 删除
PV.Spec.ClaimRef
。这个
PV 可以绑定到任何 PVC(假设容量、访问模式和
选择器匹配)
- 使 PV 可用于特定 PVC - 预填充
PV.Spec.ClaimRef
带有指向 PVC 的指针。保留 PV.Spec.ClaimRef
和空 UID,如
此时 PVC 不需要存在,您不知道
PVC 的 UID。该PV只能绑定指定的PVC。
如果您关注 dynamics provisioning 通常 pvc 具有静态名称,因为您手动创建它,然后根据声明中的信息生成 pv。
看这里:reusing-persistent-volume。
如果有帮助请告诉我。
我已经设置了一个自我管理的 kubernetes 集群以及 longhorn 作为分布式存储。安装非常简单。
我创建了一个像这样的存储 class:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: longhorn
annotations:
# make this class the default storage class
storageclass.kubernetes.io/is-default-class: "true"
provisioner: driver.longhorn.io
reclaimPolicy: Retain
allowVolumeExpansion: true
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "2880" # 48 hours in minutes
fromBackup: ""
我可以创建新的 PersistenceVolume 并将其绑定到我的 pod(例如 postgres 服务器),现在可以轻松定义 PersistenceVolumeClaim:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: appdata
spec:
accessModes:
- ReadWriteOnce
storageClassName: longhorn
resources:
requests:
storage: 2Gi
现在,在部署 Pod 后,我可以看到创建了一个 PV(当然它正在运行)
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-803d3061-457c-4023-9864-636c7a3f626a 2Gi RWO Retain Bound default/dbdata longhorn 10d
当我删除我的 postgreSQL pod 时,由于 'Retain' 政策,我的 PV 仍然存在。但是当我再次重新创建我的 pod 时,会创建一个新的 PersistenceVolume。所以现在我有两个:
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-803d3061-457c-4023-9864-636c7a3f626a 2Gi RWO Retain Released default/dbdata longhorn 10d
pvc-9385b1ad-4c06-4bf2-b595-db6681334c3d 2Gi RWO Retain Bound default/dbdata longhorn 10d
到目前为止我不明白的是 - 这是我的问题 - 我如何 create/claim 具有自定义名称(没有随机 UUID)的 PersistenceVolume。我怎样才能告诉我的 POD 重用这个 PV?或者以另一种方式问:我如何告诉 longhorn 创建一个具有给定名称而不是随机 UUID 的 PersistenceVolume?
删除PVC时,对应的PV变为Released。这个 PV 通常包含敏感数据,这就是为什么不可能绑定到它的原因,即使它是一个 PVC,与前一个具有相同的名称和相同的命名空间 - 谁知道谁在试图窃取数据!
此处需要管理员干预。有两个选项:
- 让每个人都可以使用 PV - 删除
PV.Spec.ClaimRef
。这个 PV 可以绑定到任何 PVC(假设容量、访问模式和 选择器匹配) - 使 PV 可用于特定 PVC - 预填充
PV.Spec.ClaimRef
带有指向 PVC 的指针。保留PV.Spec.ClaimRef
和空 UID,如 此时 PVC 不需要存在,您不知道 PVC 的 UID。该PV只能绑定指定的PVC。
如果您关注 dynamics provisioning 通常 pvc 具有静态名称,因为您手动创建它,然后根据声明中的信息生成 pv。
看这里:reusing-persistent-volume。
如果有帮助请告诉我。