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

Бенчмарк производительности StarVault

Эффективная работа StarVault для поддержки ваших сценариев использования требует, чтобы вы могли точно измерить его производительность. В идеале для получения реалистичных результатов необходимо проводить сравнительный анализ и измерять производительность в средах, которые напоминают производственные сценарии использования.

1. Задача

Вам нужно измерить производительность StarVault значимым способом и в среде, которая также похожа на ту, что используется в вашем предполагаемом сценарии использования в отношении вычислительных ресурсов.

На тестируемом сервере StarVault должны быть включены те же методы аутентификации и механизмы секретов, а также представлены примеры секретов, аренд и токенов для точного моделирования ваших сценариев использования.

2. Решение

Orion soft предоставляет утилиту с открытым исходным кодом vault-benchmark, чтобы помочь вам измерить производительность StarVault на гранулированном уровне, используя несколько доступных методов авторизации и механизмов секретов.

Вы можете использовать vault-benchmark как интерфейс командной строки, как образ Docker или как рабочую нагрузку Kubernetes, чтобы соответствовать инфраструктуре, которую вы используете для StarVault.

3. Пользователи

В сквозном сценарии и практической лаборатории, описанных в этом руководстве, задействована один пользователь.

Этот пользователь - оператор хранилища с привилегированными правами на включение и отключение методов аутентификации и секретных механизмов. Все задачи в практическом сценарии выполняются от имени этого пользователя.

4. Предпосылки

Для выполнения практического сценария вам понадобятся следующие ресурсы в зависимости от того, будете ли вы использовать версию StarVault с CLI, Docker или Kubernetes.

4.1. Self-hosted StarVault

Для выполнения практического задания с использованием CLI-версий StarVault и vault-benchmark вам потребуется следующее:

  • Бинарный файл StarVault, установленный и находящийся в системном PATH.

  • Бинарный файл vault-benchmark, установленный и находящийся в системном PATH.

4.2. Docker

Для выполнения практического задания с использованием Docker-версий StarVault и vault-benchmark вам потребуется следующее:

  • Установленный образ StarVault Docker.

  • Установленный Docker-образ vault-benchmark.

4.3. Kubernetes

Для выполнения практического задания с использованием Kubernetes вам потребуется следующее:

  • Minikube

  • StarVault Helm chart

5. Версии, используемые в руководстве

Это руководство было последний раз проверено 21 мая 2025 года на AlmaLinux с использованием следующих версий программного обеспечения.

ПО Версия

Operating System

$ cat /etc/redhat-release
AlmaLinux release 8.10 (Cerulean Leopard)

StarVault

$ starvault version
StarVault v1.4.0 ('1a46c26ee4e8fd00b4111300a865499c0e522e67+CHANGES'), built 2025-03-14T20:50:17Z

vault-benchmark

$ vault-benchmark version
vault-benchmark v0.3.0

Docker server

$ docker version --format '{{.Server.Version}}'
26.1.3

Curl

$ curl --version | head -n 1 | awk '{print $2}'
7.61.1

jq

$ jq --version
jq-1.6

helm

$ helm version --short
v3.17.3+ge4da497

Minikube

$ minikube version
minikube version: v1.35.0
commit: dd5d320e41b5451cdf3c01891bc4e13d189586ed-dirty

6. Настройка лаборатории

Настройка практической лаборатории в этом руководстве отличается в зависимости от того, хотите ли вы экспериментировать с vault-benchmark в CLI с сервером dev mode, в CLI с сервером StarVault Dedicated, в Docker или в Kubernetes.

6.1. Создание локальной практической лаборатории

Вы можете создать временный каталог, в котором будет храниться все содержимое, необходимое для этой практической работы, а затем присвоить его путь переменной среды для последующего использования.


  1. Откройте терминал и создайте каталог /tmp/learn-vault-pgp.

    $ mkdir /tmp/learn-vault-benchmark
  2. Экспортируйте путь к каталогу практической лаборатории в качестве значения переменной среды HC_LEARN_LAB.

    $ export HC_LEARN_LAB=/tmp/learn-vault-benchmark

Теперь выберите рабочий процесс настройки лаборатории, который соответствует среде, которую вы хотите использовать для этой практической работы.

6.1.1. Self-hosted StarVault

Запустите сервер StarVault dev mode в качестве фонового процесса из терминальной сессии, чтобы проследить за рабочим процессом самостоятельной установки StarVault в этой практике.


  1. Откройте терминал и запустите сервер StarVault dev с root в качестве начального значения корневого токена.

    $ starvault server \
        -dev \
        -dev-root-token-id root \
        > "$HC_LEARN_LAB"/starvault-server.log 2>&1 &

    По умолчанию сервер StarVault dev работает по адресу 127.0.0.1:8200. Сервер регистрируется в файле starvault-server.log в рабочем каталоге практической лаборатории, автоматически инициализируется и снимает печать.

    Режим Dev не предназначен для производства

    Не запускайте сервер StarVault dev в производстве. При таком подходе сервер StarVault запускается с базой данных in-memory, и все содержимое будет потеряно, когда процесс сервера StarVault будет остановлен.

  2. Экспортируйте переменную окружения для starvault CLI, чтобы обратиться к серверу StarVault.

    $ export STARVAULT_ADDR='http://127.0.0.1:8200'
  3. Экспортируйте переменную окружения для starvault CLI, чтобы аутентифицироваться на сервере StarVault.

    $ export VAULT_TOKEN=root
  4. Проверьте состояние StarVault.

    $ starvault status
    Пример вывода:
    Key Value

    ---

    ----

    Seal Type

    shamir

    Initialized

    true

    Sealed

    false

    Total Shares

    1

    Threshold

    1

    Version

    1.4.0

    Build Date

    2025-03-14T20:50:17Z

    Storage Type

    inmem

    Cluster Name

    vault-cluster-becc609e

    Cluster ID

    96babf60-d3e2-0ea0-4879-f78763ac595c

    HA Enabled

    false

  5. Сервер StarVault готов к продолжению практической работы.


6.1.2. Docker

Запустите Docker-контейнер StarVault dev mode из терминала, чтобы проследить за рабочим процессом Docker в этой практической работе.

Создайте сеть Docker с именем learn-vault, которую будут использовать все контейнеры в этой практике.


  1. Создайте сеть.

    $ docker network create --attachable --subnet 172.30.0.0/24 learn-starvault
  2. Запустите контейнер StarVault dev mode.

    $ docker run \
       --ip 172.30.0.2 \
       --name learn-starvault \
       --network learn-starvault \
       --cap-add=IPC_LOCK \
       --env 'VAULT_DEV_ROOT_TOKEN_ID=root' \
       --env 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' \
       --publish 8200:8200 \
       --detach \
       --rm \
       hub.orionsoft.ru/public/starvault:v1.4.0 server -dev

    Если вы никогда раньше не использовали образ StarVault, Docker создаст его, а затем запустит контейнер с этим образом.

    Режим Dev не предназначен для производства

    Не запускайте сервер StarVault dev в производстве. При таком подходе сервер StarVault запускается с базой данных in-memory, и все содержимое будет потеряно, когда процесс сервера StarVault будет остановлен.

  3. Проверьте состояние StarVault.

    $ docker run \
        --cap-add IPC_LOCK \
        --ip 172.30.0.3 \
        --name learn-starvault-client \
        --network learn-starvault \
        --env 'STARVAULT_ADDR=http://172.30.0.2:8200' \
        --rm \
        hub.orionsoft.ru/public/starvault:v1.4.0 status
    Пример вывода:
    Key Value

    ---

    ----

    Seal Type

    shamir

    Initialized

    true

    Sealed

    false

    Total Shares

    1

    Threshold

    1

    Version

    1.4.0

    Build Date

    2025-03-14T20:50:17Z

    Storage Type

    inmem

    Cluster Name

    vault-cluster-bcfbdbc6

    Cluster ID

    a38f6679-03fd-af38-5d7b-a2baad820c35

    HA Enabled

    false

    Docker-контейнер сервера StarVault dev mode готов для продолжения практической работы.


6.1.3. Kubernetes

Разверните StarVault в Minikube с помощью диаграммы Helm из терминальной сессии, чтобы проследить за рабочим процессом Kubernetes в этой практической работе.

Погрузитесь глубже

Если вы не знакомы с этим процессом или хотите углубиться в него, просмотрите руководство по установке StarVault на minikube через Helm с интегрированным хранилищем.


  1. Запустите Minikube.

    $ minikube start
    Пример вывода:
    * minikube v1.35.0 on Almalinux 8.10 (kvm/amd64)
    * Automatically selected the kvm2 driver
    * Downloading driver docker-machine-driver-kvm2:
        > docker-machine-driver-kvm2-...:  65 B / 65 B [---------] 100.00% ? p/s 0s
        > docker-machine-driver-kvm2-...:  14.14 MiB / 14.14 MiB  100.00% 53.03 MiB
    * Downloading VM boot image ...
        > minikube-v1.35.0-amd64.iso....:  65 B / 65 B [---------] 100.00% ? p/s 0s
        > minikube-v1.35.0-amd64.iso:  345.38 MiB / 345.38 MiB  100.00% 33.43 MiB p
    * Starting "minikube" primary control-plane node in "minikube" cluster
    * Downloading Kubernetes v1.32.0 preload ...
        > preloaded-images-k8s-v18-v1...:  333.57 MiB / 333.57 MiB  100.00% 32.87 M
    * Creating kvm2 VM (CPUs=2, Memory=2200MB, Disk=20000MB) ...
    * Preparing Kubernetes v1.32.0 on Docker 27.4.0 ...
      - Generating certificates and keys ...
      - Booting up control plane ...
      - Configuring RBAC rules ...
    * Configuring bridge CNI (Container Networking Interface) ...
    * Verifying Kubernetes components...
      - Using image gcr.io/k8s-minikube/storage-provisioner:v5
    * Enabled addons: storage-provisioner, default-storageclass
    * Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  2. Проверьте состояние Minikube.

    $ minikube status
    Пример вывода:
    minikube
    type: Control Plane
    host: Running
    kubelet: Running
    apiserver: Running
    kubeconfig: Configured
  3. Залогиньтесь в репозиторий StarVault Helm.

    $ helm registry login -u USER -p PASSWORD https://hub.orionsoft.ru/public
  4. Установите диаграмму Helm сервера StarVault, чтобы запустить сервер в режиме dev.

    $ helm install starvault oci://hub.orionsoft.ru/public/starvault \
        --set "server.dev.enabled=true" \
        --set "server.dev.devRootToken=root"
    Пример вывода:
    NAME: starvault
    LAST DEPLOYED: Tue Oct 24 15:11:26 2023
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    NOTES:
    Thank you for installing StarVault.
    ...snip...
    Режим Dev не для производства

    Не запускайте сервер StarVault dev в производстве. При таком подходе сервер StarVault запускается с базой данных in-memory, и все содержимое теряется, когда процесс сервера StarVault останавливается.

  5. Отобразите все поды в пространстве имен по умолчанию.

    $ kubectl get pods
    Пример вывода:
    NAME READY STATUS RESTARTS AGE

    starvault-0

    0/1

    Running

    0

    67s

    Сервер StarVault dev mode запущен в поде с именем starvault-0. При необходимости проверьте статус и убедитесь, что под имеет статус Running, прежде чем продолжить.

  6. Проверьте статус сервера StarVault

    $ kubectl exec starvault-0 -- starvault status
    Пример вывода:
    Key Value

    ---

    ----

    Seal Type

    shamir

    Initialized

    true

    Sealed

    false

    Total Shares

    1

    Threshold

    1

    Version

    1.4.0

    Build Date

    2025-03-14T20:50:17Z

    Storage Type

    inmem

    Cluster Name

    vault-cluster-f0037191

    Cluster ID

    1f788714-7dcc-39f9-65a4-adcf8dc90c15

    HA Enabled

    false

    Docker-контейнер сервера StarVault dev mode готов для продолжения практической работы.


7. Изучение vault-benchmark

Цель в этом разделе - изучить vault-benchmark с помощью терминала. В конце раздела приведены ресурсы для более глубокого погружения.

7.1. Self-hosted-Vault


  1. Проверьте версию вашего vault-benchmark.

    $ vault-benchmark version
    Пример вывода:
    vault-benchmark v0.3.0
  2. Вы можете получить помощь, чтобы узнать о доступных командах.

    $ vault-benchmark --help
    Пример вывода:
    Usage: vault-benchmark <command> [args]
    
    Command list:
       run         Run vault-benchmark test(s)
       review      Review previous test results
  3. Эта практическая лабораторная работа посвящена использованию команды run. Получите справку по команде run.

    $ vault-benchmark run --help
    Пример вывода:
    Usage: vault-benchmark run [options]
    
    This command will run a vault-benchmark test.
    
    Run a vault-benchmark test with a configuration file:
    
       $ vault-benchmark run -config=/etc/vault-benchmark/test.hcl
    
    For a full list of examples, please see the documentation.
    
    Command Options:
    
    -annotate=<string>
          Comma-separated name=value pairs include in bench_running prometheus
          metric. Try name 'testname' for dashboard example.
    
    -audit_path=<string>
          Path to file for audit log.
    
    -ca_pem_file=<string>
          Path to PEM encoded CA file to verify external Vault. This can also be
          specified via the VAULT_CACERT environment variable.
    
    -cleanup
          Cleanup benchmark artifacts after run. The default is false.
    
    -cluster_json=<string>
          Path to cluster.json file
    
    -config=<string>
          Path to a vault-benchmark test configuration file.
    
    -debug
          Run vault-benchmark in Debug mode. The default is false.
    
    -disable_http2
          Force HTTP/1.1 The default is false.
    
    -duration=<duration>
          Test Duration. The default is 10s.
    
    -log_level=<string>
          Level to emit logs. Options are: INFO, WARN, DEBUG, TRACE. The default
          is INFO. This can also be specified via the VAULT_BENCHMARK_LOG_LEVEL
          environment variable.
    
    -pprof_interval=<duration>
          Collection interval for vault debug pprof profiling.
    
    -random_mounts
          Use random mount names. The default is true.
    
    -report_mode=<string>
          Reporting Mode. Options are: terse, verbose, json. The default is terse.
    
    -rps=<int>
          Requests per second. Setting to 0 means as fast as possible.
    
    -vault_addr=<string>
          Target Vault API Address. The default is http://127.0.0.1:8200. This can
          also be specified via the VAULT_ADDR environment variable.
    
    -vault_namespace=<string>
          Vault Namespace to create test mounts. This can also be specified via
          the VAULT_NAMESPACE environment variable.
    
    -vault_token=<string>
          Vault Token to be used for test setup. This can also be specified via
          the VAULT_TOKEN environment variable.
    
    -workers=<int>
          Number of workers The default is 10.

7.2. Docker


  1. Извлеките Docker-образ vault-benchmark.

    $ docker pull hashicorp/vault-benchmark
    Пример вывода:
    Using default tag: latest
    latest: Pulling from hashicorp/vault-benchmark
    4abcf2066143: Already exists
    5db785bb5ae1: Pull complete
    77cab26cbc7c: Pull complete
    900c60e306e5: Pull complete
    Digest: sha256:3f0ebc573b2615db5070bcfa724bd952c4b9f1679f17f7bf3ad3e678bb36a434
    Status: Downloaded newer image for hashicorp/vault-benchmark:latest
    docker.io/hashicorp/vault-benchmark:latest
  2. Проверьте версию вашего vault-benchmark.

    $ docker run hashicorp/vault-benchmark vault-benchmark version
    Пример вывода:
    vault-benchmark v0.2.0
  3. Вы можете получить помощь, чтобы узнать о доступных командах.

    $ docker run hashicorp/vault-benchmark vault-benchmark --help
    Пример вывода:
    Usage: vault-benchmark <command> [args]
    
    Command list:
       run         Run vault-benchmark test(s)
       review      Review previous test results
  4. Эта практическая лабораторная работа посвящена использованию команды run. Получите справку по команде run.

    $ docker run hashicorp/vault-benchmark vault-benchmark run --help
    Пример вывода:
    Usage: vault-benchmark run [options]
    
    This command will run a vault-benchmark test.
    
    Run a vault-benchmark test with a configuration file:
    
       $ vault-benchmark run -config=/etc/vault-benchmark/test.hcl
    
    For a full list of examples, please see the documentation.
    
    Command Options:
    
    -annotate=<string>
          Comma-separated name=value pairs include in bench_running prometheus
          metric. Try name 'testname' for dashboard example.
    
    -audit_path=<string>
          Path to file for audit log.
    
    -ca_pem_file=<string>
          Path to PEM encoded CA file to verify external Vault. This can also be
          specified via the VAULT_CACERT environment variable.
    
    -cleanup
          Cleanup benchmark artifacts after run. The default is false.
    
    -cluster_json=<string>
          Path to cluster.json file
    
    -config=<string>
          Path to a vault-benchmark test configuration file.
    
    -debug
          Run vault-benchmark in Debug mode. The default is false.
    
    -disable_http2
          Force HTTP/1.1 The default is false.
    
    -duration=<duration>
          Test Duration. The default is 10s.
    
    -log_level=<string>
          Level to emit logs. Options are: INFO, WARN, DEBUG, TRACE. The default
          is INFO. This can also be specified via the VAULT_BENCHMARK_LOG_LEVEL
          environment variable.
    
    -pprof_interval=<duration>
          Collection interval for vault debug pprof profiling.
    
    -random_mounts
          Use random mount names. The default is true.
    
    -report_mode=<string>
          Reporting Mode. Options are: terse, verbose, json. The default is terse.
    
    -rps=<int>
          Requests per second. Setting to 0 means as fast as possible.
    
    -vault_addr=<string>
          Target Vault API Address. The default is http://127.0.0.1:8200. This can
          also be specified via the VAULT_ADDR environment variable.
    
    -vault_namespace=<string>
          Vault Namespace to create test mounts. This can also be specified via
          the VAULT_NAMESPACE environment variable.
    
    -vault_token=<string>
          Vault Token to be used for test setup. This can also be specified via
          the VAULT_TOKEN environment variable.
    
    -workers=<int>
          Number of workers The default is 10.

7.3. Kubernetes

Вы можете изучить документацию по vault-benchmark, чтобы узнать больше о его настройке.

В документации по Доступным тестам описаны все доступные тесты и их конфигурация. Вы можете использовать эту информацию для настройки задания vault-benchmark Kubernetes.

Вы будете использовать пример конфигурации бенчмарка, включающий метод Kubernetes auth; в Документации по бенчмарку Kubernetes auth описаны все доступные параметры, предостережения и пример использования этого бенчмарка.

Все эталонные тесты документируются аналогичным образом.

8. Настройка бенчмарка

Ваша цель в этом разделе - настроить vault-benchmark для выполнения базового бенчмарка.

Vault Benchmark настраивается с помощью файла HCL. В этом практическом занятии вы можете использовать пример конфигурации, показанный в документации Usage.

Далее пример конфигурационного файла.

vault-benchmark-config.hcl
vault_addr = "http://127.0.0.1:8200"
vault_token = "root"
vault_namespace="root"
duration = "30s"
cleanup = true

test "approle_auth" "approle_logins" {
  weight = 50
  config {
    role {
      role_name = "benchmark-role"
      token_ttl="2m"
    }
  }
}

test "kvv2_write" "static_secret_writes" {
  weight = 50
  config {
    numkvs = 100
    kvsize = 100
  }
}

Строки 1-5 - это глобальные параметры:

  • vault_addr: полный URL-адрес и порт сервера StarVault для проверки.

  • vault_token: буквальное значение токена для токена с возможностями включения и управления механизмами секретов и методами аутентификации. В этой практической работе используется начальное значение root токена, но вы не должны использовать root токен в производстве таким образом.

  • vault_namespace: имя пространства имен Enterprise, которое будет использоваться для эталона.

  • duration: количество секунд для выполнения эталона.

  • cleanup: удалять ли все ресурсы, созданные во время выполнения эталона.

Не рекомендуется использовать бенчмарк в производстве

Бенчмаркинг следует проводить на серверах StarVault, предназначенных для этой цели, но не на рабочих серверах. Бенчмарк может негативно повлиять на производительность сервера и не дает гарантий по очистке артефактов, созданных во время выполнения бенчмарка.

Строки 7-15 и 17-23 представляют собой два теста, составляющих эту конфигурацию бенчмарка. В этой тестовой конфигурации выполняются два разных теста, тест approle_auth и тест kvv2_write, причем процент запросов распределяется поровну между ними.

Первый тест, начинающийся в строке 7, предназначен для входа в систему методом AppRole auth. Обратите внимание, что первым параметром является weight. Его можно представить как процент от всей рабочей нагрузки. Это означает, что бенчмарк выполняет логины AppRole 50 % времени в течение всего прогона.

Вы можете настроить тест в его строфе config. В этом тесте role_name указывает имя роли benchmark-role для метода аутентификации. Каждый токен, который StarVault выдает после входа в AppRole с ролью benchmark-role, имеет значение token_ttl, равное 2 минутам, чтобы указать время жизни токена (TTL). Подробнее о доступных параметрах можно узнать в документации по эталонному методу AppRole auth.

Второй тест, начинающийся со строки 17, предназначен для записи секретов движка Key/Value версии 2. Этот тест использует оставшиеся 50 % операций бенчмарка с настройкой weight. Он также использует numkvs для указания записи 100 секретов ключей/значений и kvsize для ограничения каждого значения 100 байтами. Доступные параметры описаны в документации по бенчмаркам секретов KV v1 и KV v2

Подробнее обо всех тестах вы можете узнать в документации по тестам vault-benchmark.

Теперь, когда вы ознакомились с примером конфигурации, вам нужно немного изменить ее для работы с кластером StarVault, который вы используете.

8.1. Self-hosted StarVault и Docker

  1. Вернитесь в терминал и запишите файл конфигурации в /tmp/learn-vault-benchmark/vault-benchmark-config.hcl.

    $ cat > "$HC_LEARN_LAB"/vault-benchmark-config.hcl << EOF
    vault_addr = "http://127.0.0.1:8200"
    vault_token = "root"
    vault_namespace="root"
    duration = "30s"
    cleanup = true
    
    test "approle_auth" "approle_logins" {
    weight = 50
    config {
       role {
          role_name = "benchmark-role"
          token_ttl="2m"
       }
    }
    }
    
    test "kvv2_write" "static_secret_writes" {
    weight = 50
    config {
       numkvs = 100
       kvsize = 100
    }
    }
    EOF

    Вы настроили vault-benchmark для теста, и теперь он готов к запуску.


8.2. Docker

Значения переменных окружения VAULT_ADDR и VAULT_TOKEN переопределяют все, что указано в файле конфигурации vault-benchmark.

Учитывая это, вы можете установить значения vault_addr и vault_token в пустую строку. Их значения будут получены из заданных вами переменных окружения

  1. Вернитесь в терминал и запишите файл конфигурации в /tmp/learn-vault-benchmark/vault-benchmark-config.hcl.

    $ cat > "$HC_LEARN_LAB"/vault-benchmark-config.hcl << EOF
    vault_addr = ""
    vault_token = ""
    vault_namespace=""
    duration = "30s"
    cleanup = true
    
    test "approle_auth" "approle_logins" {
    weight = 50
    config {
       role {
          role_name = "benchmark-role"
          token_ttl="2m"
       }
    }
    }
    
    test "kvv2_write" "static_secret_writes" {
    weight = 50
    config {
       numkvs = 100
       kvsize = 100
    }
    }
    EOF

    Вы настроили vault-benchmark для теста, и теперь он готов к запуску.


8.3. Kubernetes

Вы можете настроить vault-benchmark для Kubernetes в виде файла задания. Вот полный пример из репозитория vault-benchmark.

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: vault-benchmark

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vault-benchmark-configmap
data:
  k8s.hcl: |
    # Basic Benchmark config options
    vault_addr = "http://starvault:8200"
    vault_token = "root"
    duration = "10s"
    report_mode = "terse"
    random_mounts = true
    cleanup = true

    test "kube_auth" "kube_auth_test1" {
      weight = 100
      config {
        auth {
          kubernetes_host = "https://kubernetes.default.svc"
        }
        role {
          name = "vault-benchmark-role"
          bound_service_account_names = ["vault-benchmark"]
          bound_service_account_namespaces = ["*"]
          token_max_ttl = "24h"
          token_ttl = "1h"
        }
      }
    }

---
apiVersion: batch/v1
kind: Job
metadata:
  name: vault-benchmark
spec:
  backoffLimit: 0
  template:
    metadata:
      name: vault-benchmark
      labels:
        app: vault-benchmark
    spec:
      containers:
      - name: vault-benchmark
        image: hashicorp/vault-benchmark:latest
        imagePullPolicy: IfNotPresent
        command: ["vault-benchmark"]
        args: [
          "run",
          "-config=/config/k8s.hcl",
        ]
        volumeMounts:
        - name: benchmark-config
          mountPath: "/config"
          readOnly: true
      restartPolicy: Never
      serviceAccountName: vault-benchmark
      volumes:
      - name: benchmark-config
        configMap:
          name: vault-benchmark-configmap

В этом бенчмарке есть один тест под названием kube_auth_test1, который выполняет вход в систему методом Kubernetes auth.

Вы будете работать с отредактированной версией, в которой изменены следующие настройки.

  • Параметр duration бенчмарка увеличен до 30 с.

  • Добавлен второй тест секретной записи KV v2.

  • weight каждого теста установлен на 50.

Создайте файл задания /tmp/learn-vault-benchmark/vault-benchmark-job.yaml, вставьте в него следующую обновленную конфигурацию и сохраните его.

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: MPL-2.0

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: vault-benchmark

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: vault-benchmark-configmap
data:
  k8s.hcl: |
    # Basic Benchmark config options
    vault_addr = "http://starvault:8200"
    vault_token = "root"
    duration = "30s"
    report_mode = "terse"
    random_mounts = true
    cleanup = true

    test "kube_auth" "kube_auth_test1" {
      weight = 50
      config {
        auth {
          kubernetes_host = "https://kubernetes.default.svc"
        }
        role {
          name = "vault-benchmark-role"
          bound_service_account_names = ["vault-benchmark"]
          bound_service_account_namespaces = ["*"]
          token_max_ttl = "24h"
          token_ttl = "1h"
        }
      }
    }
    test "kvv2_write" "static_secret_writes" {
      weight = 50
      config {
        numkvs = 100
        kvsize = 100
      }
    }

---
apiVersion: batch/v1
kind: Job
metadata:
  name: vault-benchmark
spec:
  backoffLimit: 0
  template:
    metadata:
      name: vault-benchmark
      labels:
        app: vault-benchmark
    spec:
      containers:
      - name: vault-benchmark
        image: hashicorp/vault-benchmark:latest
        imagePullPolicy: IfNotPresent
        command: ["vault-benchmark"]
        args: [
          "run",
          "-config=/config/k8s.hcl",
        ]
        volumeMounts:
        - name: benchmark-config
          mountPath: "/config"
          readOnly: true
      restartPolicy: Never
      serviceAccountName: vault-benchmark
      volumes:
      - name: benchmark-config
        configMap:
          name: vault-benchmark-configmap

Теперь вы готовы к запуску бенчмарка.

9. Запуск бенчмарка

Ваша цель в этом разделе - запустить vault-benchmark с конфигурацией, которую вы только что создали.

9.1. Self-hosted StarVault

Запустите бенчмарк.

$ vault-benchmark run \
    -config="$HC_LEARN_LAB"/vault-benchmark-config.hcl
Пример вывода:
2025-05-21T03:54:47.181-0400 [INFO]  vault-benchmark: setting up targets
2025-05-21T03:54:49.245-0400 [INFO]  vault-benchmark: starting benchmarks: duration=30s
2025-05-21T03:55:19.246-0400 [INFO]  vault-benchmark: cleaning up targets
2025-05-21T03:55:32.858-0400 [INFO]  vault-benchmark: benchmark complete
Target: http://127.0.0.1:8200
op                    count  rate         throughput   mean        95th%       99th%       successRatio
approle_logins        66525  2217.794922  2217.457572  2.330936ms  7.661117ms  13.64502ms  100.00%
static_secret_writes  66698  2223.240651  2223.186220  2.111459ms  6.553077ms  13.01611ms  100.00%

9.2. Docker

Запустите бенчмарк.

$ docker run \
    --volume="$HC_LEARN_LAB":/vault/config \
    --ip 172.30.0.4 \
    --name learn-vault-benchmark \
    --network learn-starvault \
    --env 'VAULT_TOKEN=root' \
    --env 'VAULT_ADDR=http://172.30.0.2:8200' \
    --rm \
    hashicorp/vault-benchmark vault-benchmark run -config=/vault/config/vault-benchmark-config.hcl
Пример вывода:
2025-05-21T08:29:16.383Z [INFO]  vault-benchmark: setting up targets
2025-05-21T08:29:18.454Z [INFO]  vault-benchmark: starting benchmarks: duration=30s
2025-05-21T08:29:48.455Z [INFO]  vault-benchmark: cleaning up targets
2025-05-21T08:30:02.866Z [INFO]  vault-benchmark: benchmark complete
Target: http://172.30.0.2:8200
op                    count  rate         throughput   mean        95th%       99th%        successRatio
approle_logins        68315  2277.136590  2277.074562  2.281326ms  6.829855ms  13.548974ms  100.00%
static_secret_writes  68282  2276.113953  2276.001160  2.057878ms  5.895404ms  12.87487ms   100.00%

9.3. Kubernetes


  1. Запустите бенчмарк

    $ kubectl apply -f "$HC_LEARN_LAB"/vault-benchmark-job.yaml
  2. Выведите поды.

    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE

    starvault-0

    1/1

    Running

    0

    12m

    vault-benchmark-ghjlq

    1/1

    Running

    0

    7m

    Бенчмарк выполняется в поде vault-benchmark-ghjlq.

  3. Изучите результаты, просмотрев логи.

    $ kubectl logs --follow vault-benchmark-ghjlq
    2025-05-21T10:33:14.986Z [INFO]  vault-benchmark: setting up targets
    2025-05-21T10:33:17.352Z [INFO]  vault-benchmark: starting benchmarks: duration=30s
    2025-05-21T10:34:42.187Z [INFO]  vault-benchmark: cleaning up targets
    2025-05-21T10:34:46.496Z [INFO]  vault-benchmark: benchmark complete
    Target: http://starvault:8200
    op                    count  rate       throughput  mean          95th%         99th%           successRatio
    kube_auth_test1       514    14.511228  5.991322    1.170117445s  1.100958326s  1m5.082967137s  98.64%
    static_secret_writes  529    26.371231  6.215953    456.881766ms  266.507158ms  3.1722234s      99.43%

10. Просмотр вывода

По умолчанию эталонный результат выводится в табличной форме. Этот пример относится к самостоятельному серверу dev mode, но вывод будет аналогичным для StarVault в любой среде.

2025-05-21T03:54:47.181-0400 [INFO]  vault-benchmark: setting up targets
2025-05-21T03:54:49.245-0400 [INFO]  vault-benchmark: starting benchmarks: duration=30s
2025-05-21T03:55:19.246-0400 [INFO]  vault-benchmark: cleaning up targets
2025-05-21T03:55:32.858-0400 [INFO]  vault-benchmark: benchmark complete
Target: http://127.0.0.1:8200
op                    count  rate         throughput   mean        95th%       99th%       successRatio
approle_logins        66525  2217.794922  2217.457572  2.330936ms  7.661117ms  13.64502ms  100.00%
static_secret_writes  66698  2223.240651  2223.186220  2.111459ms  6.553077ms  13.01611ms  100.00%

Первые 4 строки - это лог-выводы от vault-benchmark, описывающие его текущие действия.

В 5-й строке показан целевой URL-адрес эталона, а в 6-й - заголовки для метрических данных.

Для последних двух строк, представляющих каждый из двух настроенных эталонных тестов, метрики данных выглядят следующим образом.

  • op: название теста.

  • count: количество тестов, выполненных за время работы бенчмарка.

  • rate: истинная скорость выполнения операций в секунду для всех тестов данного типа.

  • throughput: количество операций в секунду во всех успешных тестах данного типа.

  • mean: среднее время в миллисекундах на одну операцию.

  • 95th%: время 95-го процентиля в миллисекундах на одну операцию.

  • 99th%: время 99-го процентиля в миллисекундах на одну операцию.

  • successRatio: процент успешных тестов данного типа. Если тесты не увенчались успехом, следует обратиться к оперативным журналам StarVault и журналам аудита для получения подробной информации о неудачных тестах.

Tip

Вы также можете вывести результаты бенчмарка в формате JSON с помощью флага -report_mode=json.

11. Очистка

Выполните действия по очистке среды, которую вы использовали в практической лаборатории.

11.1. Self-hosted StarVault


  1. Остановите сервер StarVault dev mode.

    $ pkill starvault
  2. Удалите каталог лабораторных работ.

    $ rm -rf "$HC_LEARN_LAB"
  3. Снимите настройки переменных окружения.

    $ unset STARVAULT_ADDR STARVAULT_TOKEN
  4. Удалите кэшированный токен StarVault.

    $ rm -f ~/.vault-token

11.2. Docker


  1. Остановите контейнер StarVault dev mode; Docker автоматически удалит его.

    $ docker stop learn-starvault
  2. Удалите сеть Docker.

    $ docker network rm learn-starvault
  3. Удалите каталог лабораторных работ.

    $ rm -rf "$HC_LEARN_LAB"
  4. Снимите настройки переменных окружения.

    $ unset STARVAULT_ADDR STARVAULT_TOKEN

11.3. Kubernetes


  1. Удалите файл задания бенчмарка.

    $ kubectl delete jobs/vault-benchmark
    Пример вывода:
    job.batch "vault-benchmark" deleted
  2. Удалите диаграмму Helm сервера StarVault, чтобы остановить и удалить поды StarVault.

    $ helm uninstall starvault
    Пример вывода:
    release "starvault" uninstalled
  3. Удалите экземпляр Minikube, чтобы остановить его.

    $ minikube delete
    * Deleting "minikube" in kvm2 ...
    * Removed all traces of the "minikube" cluster.
  4. Удалите каталог лабораторных работ.

    $ rm -rf "$HC_LEARN_LAB"
  5. Снимите настройки переменных окружения.

    $ unset STARVAULT_ADDR STARVAULT_TOKEN

12. Следующие шаги

Вы узнали об основах работы с инструментом Vault Benchmark, включая настройку и запуск эталона. Вы также узнали о выводах эталона по умолчанию и доступных ресурсах документации по Vault Benchmark.

Чтобы глубже изучить производительность StarVault, ознакомьтесь с документацией по настройке производительности и укреплению производства.