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

Конфигурационная опция Service registration

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

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

Для случаев, когда хотите использовать другой бэкэнд хранения, например Raft, но при этом иметь возможность регистрации сервисов, можно использовать блок конфигурации service_registration:

service_registration "kubernetes" {
  namespace      = "my-namespace"
  pod_name       = "my-pod-name"
}
storage "raft" {
  path = "/path/to/raft/data"
  node_id = "raft_node_1"
}

1. Конфигурирование блока service_registration

Настройка регистрации сервисов осуществляется в конфигурационном файле StarVault с помощью блока service_registration:

service_registration [NAME] {
  [PARAMETERS...]
}
Например
service_registration "kubernetes" {
  namespace      = "my-namespace"
  pod_name       = "my-pod-name"
}

Для параметров конфигурации, которые также считывают переменную окружения, переменная окружения имеет приоритет над значениями в файле конфигурации.

2. Регистрация сервисов в Kubernetes

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

2.1. Конфигурирование блока service_registration для регистрации сервисов в Kubernetes

service_registration "kubernetes" {}

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

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: starvault
  name: starvault-discovery-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "update", "patch",”watch”,”list”]

2.2. Примеры включения регистрации сервисов в Kubernetes

После правильной настройки, включение регистрации сервисов приведет к тому, что поды Kubernetes получат следующие метки:

apiVersion: v1
kind: Pod
metadata:
  name: starvault
  labels:
    starvault-active: "false"
    starvault-initialized: "true"
    starvault-perf-standby: "false"
    starvault-sealed: "false"
    starvault-version: 1.4.0

После выключения поды StarVault будут иметь следующие метки:

apiVersion: v1
kind: Pod
metadata:
  name: starvault
  labels:
    starvault-active: "false"
    starvault-initialized: "false"
    starvault-perf-standby: "false"
    starvault-sealed: "true"
    starvault-version: 1.4.0

2.3. Описание меток подов

  • starvault-active (string: "true"/"false") – Метка "StarVault active" обновляется динамически при каждой смене статуса активности StarVault. Значение "True" указывает, что этот под Vault ведущий. Значение "False" указывает на то, что этот под StarVault резервный.

  • starvault-initialized (string: "true"/"false") – Метка "StarVault initialized" обновляется динамически при каждой смене статуса инициализации StarVault. Значение "True" указывает на то, что Vault инициализирован. Значение "False" указывает на то, что StarVault не инициализирован.

  • starvault-perf-standby (string: "true"/"false") – Метка "StarVault performance standby" обновляется динамически при каждой смене статуса StarVault "ведущий/резервный". Это поле имеет значение только в том случае, если под является членом резервного рабочего кластера. В противном случае ему будет присвоено значение "false". Значение "True" указывает на то, что данный под StarVault  — резервный рабочий под. Значение "False" указывает на то, что под StarVault — ведущий рабочий под.

  • starvault-sealed (string: "true"/"false") – Метка "StarVault sealed" обновляется динамически при каждой смене статуса StarVault "запечатан/распечатан". Значение "True" указывает на то, что StarVault запечатан. Значение "False" указывает на то, что StarVault распечатан.

  • starvault-version (string: "1.4.0") – Метка "StarVault version" – это строка, которая не меняется на протяжении жизненного цикла пода.

2.4. Пример сервиса

Присвоив поду метки, можно создавать сервисы с помощью селекторов, чтобы фильтровать поды с определенными ролями StarVault HA, тем самым обеспечивая прямую связь с подмножествами подов StarVault.
Обратите внимание на строку: starvault-active: "true".

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/instance: starvault
    app.kubernetes.io/name: starvault
    helm.sh/chart: starvault-1.4.0
  name: starvault-active
  namespace: starvault
spec:
  clusterIP: 10.7.254.51
  ports:
  - name: http
    port: 8200
    protocol: TCP
    targetPort: 8200
  - name: internal
    port: 8201
    protocol: TCP
    targetPort: 8201
  publishNotReadyAddresses: false
  selector:
    app.kubernetes.io/instance: starvault
    app.kubernetes.io/name: starvault
    component: server
    starvault-active: "true"
  type: ClusterIP

Кроме того, задав publishNotReadyAddresses: false, можно удалить отказавшие поды из пула сервиса.

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

$ starvault write -f sys/replication/performance/primary/enable \
    primary_cluster_addr='https://starvault-active.starvault.svc.cluster.local:8201'

2.5. Примеры обновлений

Метки подов в сочетании со стратегией обновления OnDelete сильно облегчают процесс управления обновлениями:

$ helm upgrade starvault oci://hub.orionsoft.ru/public/starvault --set='server.image.tag=1.4.0' --reuse-values

$ kubectl delete pod --selector=starvault-active=false \
    --selector=vault-version=1.4.0

$ kubectl delete pod --selector=starvault-active=true \
    --selector=vault-version=1.4.0

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