如何将 helm 包连接到 PersistentStorage 卷?

How do I connect a helm package to a PersistentStorage volume?

我经常看到这个问题出现,但我还没有找到一个干净、通用的解决方案。我只是在学习 Kubernetes,所以也许我缺少一些基本的东西。但这是我所做的:

  1. 安装 docker-desktop with kubernetes
  2. 使用 yaml 文件手动创建持久存储卷(如下所示)
  3. helm install redis dandydev/redis-ha

或者您可以使用任何其他 helm chart,无论是 elasticsearch、postgres 还是您的名字。我总是得到 pod has unbound immediate PersistentVolumeClaims.

还有当我运行:kubectl get storageclasses.storage.k8s.io 我有(默认)存储空间:

NAME                 PROVISIONER          AGE
hostpath (default)   docker.io/hostpath   3h8m

任何人都可以帮助我以通用方式解决此问题吗?这样我就可以实际安装 helm charts 并让它们自动连接到持久存储卷?

我的volume.yaml:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: redis-volume
  labels:
    type: local
    app: redis
spec:
  storageClassName: ""
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/mnt/redis"

好的,所以我在网上查看了各种自定义解决方案,其中一个确实有效: https://github.com/helm/charts/issues/12521#issuecomment-477834805

此外,此答案提供了有关如何在本地启用动态配置的更多详细信息:

基本上(除了上面创建的卷之外)我需要手动:

  1. 创建存储 class,通过存储-class.yaml
  2. 将存储 class 添加到 'values.yaml'
  3. 中掌舵
# storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: data-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

此外,一些图表 运行 在本地需要您在 <your-helm>/charts/<chart-name>/<file-to-config.yaml> 下或通过 --set <var>=value 自定义它们的配置,因为大多数 helm 图表都希望您使用更多节点,并且运行 在本地你可能只有一个节点。

另一种选择是使用 helm install --set replicas=1 ...,一些图表可以很好地处理它。

希望这对那里的人有所帮助。