Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何使用Helm on GKE重用动态配置的PersistentVolume?_Kubernetes_Kubernetes Helm_Google Kubernetes Engine - Fatal编程技术网

Kubernetes 如何使用Helm on GKE重用动态配置的PersistentVolume?

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

我正在尝试部署一个helm图表,它使用
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