Настройка 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. Дополнительные примеры
1.1. Конфигурация 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.2. Списки томов и точек монтирования
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.3. Аннотации
Аннотации можно задать в виде 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"
},
]