首页 > 解决方案 > 配置 Vault-Helm PVC

问题描述

我对 K8S 还很陌生,我一直在尝试在 k8s 上实现 vault。我一直在尝试使用 Helm 在 K8S 上部署 Hashicorp Vault,正如他们网站上所写的那样。-- https://www.vaultproject.io/docs/platform/k8s/helm/run/ -- https://github.com/hashicorp/vault-helm - 分支 0.4.0

我遇到了一个对我来说并不完全清楚的问题。在文件中,要编辑 Values.yaml 以便为我的环境配置它,同时我尝试将其配置为根据需要写入存储。此配置位于文件中,如下所示:

  # This configures the Vault Statefulset to create a PVC for data
  # storage when using the file backend.
  # See https://www.vaultproject.io/docs/configuration/storage/index.html to know more
  dataStorage:
    enabled: true
    # Size of the PVC created
    size: 10Gi
    # Name of the storage class to use.  If null it will use the
    # configured default Storage Class.
    storageClass: null
    # Access Mode of the storage device being used for the PVC
    accessMode: ReadWriteOnce

当运行它时,它应该创建一个名为“数据”的 PVC 作为默认值:

“数据保险库-0”

这是从 kubectl describe pod vault-0 收到的消息

为 pod“vault-0”运行“VolumeBinding”过滤器插件时出错:pod has unbound immediate > PersistentVolumeClaims

接下来,命令 kubectl describe pvc data-vault-0 显示:

找不到持久卷控制器 storageclass.storage.k8s.io “数据”

我跟进了它应该配置PVC的方式,它使用了一个名为的帮助文件

_helpers.tpl

在该帮助文件中,它显示了如下配置:

{{/*
Set's up the volumeClaimTemplates when data or audit storage is required.  HA
might not use data storage since Consul is likely it's backend, however, audit
storage might be desired by the user.
*/}}
{{- define "vault.volumeclaims" -}}
  {{- if and (ne .mode "dev") (or .Values.server.dataStorage.enabled .Values.server.auditStorage.enabled) }}
  volumeClaimTemplates:
      {{- if and (eq (.Values.server.dataStorage.enabled | toString) "true") (eq .mode "standalone") }}
    - metadata:
        name: data
      spec:
        accessModes:
          - {{ .Values.server.dataStorage.accessMode | default "ReadWriteOnce" }}
        resources:
          requests:
            storage: {{ .Values.server.dataStorage.size }}
          {{- if .Values.server.dataStorage.storageClass }}
        storageClassName: {{ .Values.server.dataStorage.storageClass }}
          {{- end }}
      {{ end }}

我用 pvc 和 pv 深入研究了 k8s。在我看来,我需要定义一个 pv 并且只有这样才能正确加载整个图表问题是......我有点迷失了如何做到这一点,以便它可以与这个图表一起工作我需要使用单独的部署k8s 部署?像为 pv 写一个特定的 yaml 然后运行图表?

有没有人处理过这个问题并可以提供指点?

谢谢!

标签: kubernetes-helmhashicorp-vault

解决方案


  1. 创建存储类

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: local-storage
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    
  2. 在要存储 PV 的节点上创建目录,然后在 k8s 中创建 PV。请参见下面的示例。

  3. 为该节点分配标签“app.kubernetes.io/instance: vault”
  4. 从 Helm 修复 PVC。PVC 应该在规范中包含 storageClassName: local-storage。您可以在仪表板中执行此操作(复制并删除旧的然后添加新的)。

示例 PV(将 vault_node_hostname 替换为您的数据)

# mkdir -p /srv/cluster/storage/001
# cat PersistentVolume001.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: vol001
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: local-storage
  local:
    path: /srv/cluster/storage/001
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - vault_node_hostname

# kubectl create -f PersistentVolume001.yaml

推荐阅读