Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Настройка StarVault Helm с помощью Terraform

Terraform также может использоваться для настройки и развертывания Helm-чарта StarVault с использованием Helm-провайдера.

Например, чтобы настроить чарт для развертывания StarVault в режиме высокой доступности (HA) с встроенным хранилищем (Raft), переопределения параметров (values) можно задать в командной строке, YAML-файле или напрямую в конфигурации Terraform.

Пример команды установки с переопределением параметров:

$ helm install starvault oci://hub.orionsoft.ru/public/starvault --namespace starvault --create-namespace --set "server.ha.enabled=true" --set "global.imagePullSecrets[0]=myregsecret"
global:
  enabled: true
  imagePullSecrets:
    - name: myregsecret
server:
  ha:
    enabled: true
provider "helm" {
  kubernetes = {
    config_path = "~/.kube/config"
  }
}

resource "helm_release" "starvault" {
  name             = "starvault"
  chart            = "oci://hub.orionsoft.ru/public/starvault"
  namespace        = "starvault"
  create_namespace = true

  set = [
    {
      name  = "global.imagePullSecrets[0]"
      value = "myregsecret"
    },
    {
      name  = "server.ha.enabled"
      value = "true"
    }
  ]
}

Файл значений также можно использовать напрямую в конфигурации Terraform с помощью директивы values.

1. Дополнительные примеры

[[configuration-starvault-multiline string]] === Конфигурация StarVault в виде многострочной строки

global:
  enabled: true
  imagePullSecrets:
    - name: myregsecret

server:
  ha:
    enabled: true
    setNodeId: true
    config: |
      ui = false

      listener "tcp" {
        tls_disable      = 1
        address          = "[::]:8200"
        cluster_address  = "[::]:8201"
      }

      storage "raft" {
        path = "/starvault/data"
      }
resource "helm_release" "starvault" {
  name      = "starvault"
  chart     = "oci://hub.orionsoft.ru/public/starvault"
  namespace = "starvault"
  create_namespace = true

  set = [
  {
    name  = "global.imagePullSecrets[0]"
    value = "myregsecret"
  },
  {
    name  = "server.ha.enabled"
    value = "true"
  },
  {
    name  = "server.ha.setNodeId"
    value = "true"
  },
  {
    name  = "server.ha.config"
    value = <<EOT
ui = false

listener "tcp" {
  tls_disable      = 1
  address          = "[::]:8200"
  cluster_address  = "[::]:8201"
}

storage "raft" {
  path = "/starvault/data"
}

EOT
  }
  ]
}

1.1. Списки томов и точек монтирования

server:
  volumes:
    - name: userconfig-my-gcp-iam
      secret:
        defaultMode: 420
        secretName: my-gcp-iam

  volumeMounts:
    - mountPath: /starvault/userconfig/my-gcp-iam
      name: userconfig-my-gcp-iam
      readOnly: true
resource "helm_release" "starvault" {
  name      = "starvault"
  chart     = "oci://hub.orionsoft.ru/public/starvault"
  namespace = "starvault"

  set = [
  {
    name  = "server.volumes[0].name"
    value = "userconfig-my-gcp-iam"
  },
  {
    name  = "server.volumes[0].secret.secretName"
    value = "my-gcp-iam"
  },
  {
    name  = "server.volumes[0].secret.defaultMode"
    value = "420"
  },
  {
    name  = "server.volumeMounts[0].name"
    value = "userconfig-my-gcp-iam"
  },
  {
    name  = "server.volumeMounts[0].mountPath"
    value = "/starvault/userconfig/my-gcp-iam"
  },
  {
    name  = "server.volumeMounts[0].readOnly"
    value = "true"
  }
  ]
}

1.2. Аннотации

Аннотации можно задать в виде YAML-карты:

server:
  ingress:
    enabled: true
    annotations:
      kubernetes.io/ingress.class: nginx
      kubernetes.io/tls-acme: "true"
  set = [
    {
      name  = "server.ingress.enabled"
      value = "true"
    },
    {
      name  = "server.ingress.annotations.kubernetes\\.io\\/ingress\\.class"
      value = "nginx"
    },
    {
      name  = "server.ingress.annotations.kubernetes\\.io\\/tls-acme"
      value = "true"
      type  = "string"
    }
  ]

Аннотации можно задать в виде строк:

server:
  ingress:
    enabled: true
    annotations: |
      kubernetes.io/ingress.class: nginx
      kubernetes.io/tls-acme: "true"
  set = [
    {
      name  = "server.ingress.enabled"
      value = "true"
    },
    {
      name  = "server.ingress.annotations"
      value = yamlencode({
        "kubernetes.io/ingress.class" = "nginx"
        "kubernetes.io/tls-acme"      = "true"
      })
      type = "auto"
    },
  ]