如何在GKE上重用动态配置的PersistentVolumes和Helm?

时间:2018-03-18 04:35:08

标签: kubernetes kubernetes-helm google-kubernetes-engine

我正在尝试部署一个使用PersistentVolumeClaimStorageClass来动态配置所需sotrage的头盔图。这可以按预期工作,但我找不到任何允许像

这样的工作流程的配置
helm delete xxx

# Make some changes and repackage chart

helm install --replace xxx

我不想经常运行该版本,并且我希望将来在部署中重用存储。

将存储类设置为reclaimPolicy: Retain会保留磁盘,但是helm会删除PVC并将其孤立。注释PVC以便helm不会删除它们修复了这个问题,但是然后运行install会导致错误

Error: release xxx failed: persistentvolumeclaims "xxx-xxx-storage" already exists

我认为我误解了管理掌舵版本的基本内容。也许不应该在图表中创建卷。

2 个答案:

答案 0 :(得分:6)

PersistenVolumeClain只在您的实际PersistentVolume和您的广告连播之间创建一个映射。

对PV使用"helm.sh/resource-policy": keep注释不是最好的主意,因为documentation中的注释:

  

注释“helm.sh/resource-policy”:keep指示Tiller在头盔删除操作期间跳过此资源。但是,这种资源变成了孤儿。 Helm将不再以任何方式管理它。如果在已经删除但仍保留资源的版本上使用helm install --replace,这可能会导致问题。

如果您在删除发行版后手动创建PV,Helm将删除PVC,将其标记为“可用”,在下次部署时,它将重复使用它。实际上,您不需要将PVC保留在群集中以保留数据。但是,为了使它始终使用相同的PV,您需要使用labels and selectors

对于保留和重用卷,您可以:

  1. 使用标签创建PersistenVolume,例如for_app=my-app并为该卷设置“保留”政策,如下所示:
  2. apiVersion: v1 kind: PersistentVolume metadata: name: myappvolume namespace: my-app labels: for_app: my-app spec: persistentVolumeReclaimPolicy: Retain capacity: storage: 5Gi accessModes: - ReadWriteOnce

    1. 修改Helm中的PersistenVolumeClaim配置。您需要添加一个选择器,仅使用带有标签for_app=my-app的PersistenVolumes。
    2. apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myappvolumeclaim namespace: my-app spec: selector: matchLabels: for_app: my-app accessModes: - ReadWriteOnce resources: requests: storage: 5Gi

      因此,现在您的应用程序每次启动时都会使用相同的卷。

      但是,请记住,您可能需要在同一命名空间中使用其他应用程序的选择器,以防止他们使用您的PV。

答案 1 :(得分:0)

实际上,我建议使用StateFul集和VolumeClaimTemplates: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

那里的例子应该说明一切。