Kubernetes 如何使用Helm on GKE重用动态配置的PersistentVolume?
我正在尝试部署一个helm图表,它使用Kubernetes 如何使用Helm on GKE重用动态配置的PersistentVolume?,kubernetes,kubernetes-helm,google-kubernetes-engine,Kubernetes,Kubernetes Helm,Google Kubernetes Engine,我正在尝试部署一个helm图表,它使用PersistentVolumeClaim和StorageClass动态调配所需的存储空间。这正如预期的那样工作,但我找不到任何允许类似工作流的配置 helm delete xxx # Make some changes and repackage chart helm install --replace xxx 我不想一直运行这个版本,我希望将来在部署中重用存储 将存储类设置为回收策略:Retain保留磁盘,但helm将删除PVC并将其孤立。注释PV
PersistentVolumeClaim
和StorageClass
动态调配所需的存储空间。这正如预期的那样工作,但我找不到任何允许类似工作流的配置
helm delete xxx
# Make some changes and repackage chart
helm install --replace xxx
我不想一直运行这个版本,我希望将来在部署中重用存储
将存储类设置为回收策略:Retain
保留磁盘,但helm将删除PVC并将其孤立。注释PVC以便helm不会删除它们可以修复此问题,但运行install会导致错误
Error: release xxx failed: persistentvolumeclaims "xxx-xxx-storage" already exists
我想我误解了在helm中管理发布的一些基本内容。也许根本不应该在图表中创建卷。只创建实际卷和pod之间的映射
使用“helm.sh/resource policy”:为PV保留注释并不是最好的主意,因为在一个:
注释“helm.sh/resource policy”:keep指示舵手在舵手删除操作期间跳过此资源。但是,此资源将成为孤立资源。赫尔姆将不再以任何方式管理它。如果在已删除但保留了资源的版本上使用helm install--replace,这可能会导致问题
如果在删除版本后手动创建PV,Helm将删除PVC,PVC将标记为“可用”,并在下次部署时重新使用。实际上,您不需要将PVC保存在集群中来保存数据。但是,为了使它始终使用相同的PV,您需要使用
对于保留和重用卷,您可以:
创建带有标签的PersistenVolume,例如,为_app=my app创建,并为该卷设置“保留”策略,如下所示:
在Helm中修改PersistenVolumeClaim配置。对于_app=my app
,您需要添加一个选择器,以便仅使用带有标签的PersistenVolume
因此,现在应用程序每次启动时都将使用相同的卷
但是,请记住,您可能需要为同一命名空间中的其他应用程序使用选择器,以防止它们使用您的PV。实际上,我建议使用有状态集和VolumeClaimTemplates:
那里的例子本身就应该说明问题。看起来问题可能是由于注释了一个不应该保留的额外PVC。我仍然想知道什么是正确的方法thoughHi@anton kostenko,只是想澄清一下,在使用helm
时,我必须在图表之外手动设置PV,以便该方法起作用,对吗?谢谢您可以手动创建,也可以在应用程序中使用helm
图表,两种方法都可以。谢谢。动态资源调配不是一个替代方案,这真是糟糕。如果我用同一个标签创建了多个PV(我的应用程序),会怎么样?pvc会随机选择一个PV吗?PV和pvc是否由helm自动创建和管理?虽然这是创建PV和pvc的好方法,但当版本被删除和清除时,PV不会被移除。这会产生一个问题,因为PV仍然存在,所以无法重新部署版本。必须通过更改模板以允许删除来手动删除PV。这似乎不对。Helm应支持重复使用已经存在的PV,而不是尝试创建新PV。
apiVersion: v1
kind: PersistentVolume
metadata:
name: myappvolume
namespace: my-app
labels:
for_app: my-app
spec:
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myappvolumeclaim
namespace: my-app
spec:
selector:
matchLabels:
for_app: my-app
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi