Установка модуля OpenSearch
1. Предварительные условия
-
Вы ознакомились с архитектурой и концепциями OpenSearch в Nova Container Platform.
-
Вы ознакомились с документацией по планированию установки и системным требованиям OpenSearch.
-
У вас есть доступ к кластеру с учетной записью, имеющей роль
cluster-adminв Kubernetes. -
Вы установили утилиту
kubectlдля работы с Kubernetes. -
Вы ознакомились с инструкцией по работе с OperatorHUB.
2. Установка модуля OpenSearch с помощью kubectl
2.1. С помощью кастомизации
-
Сохраните один из представленных ниже манифестов в файл, например,
OpenSearch.yaml. Ниже предоставлены примеры манифестов для различных конфигураций.Для кластера в минимальной конфигурации
apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-pre namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/pre postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-main namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post - name: nova-release-logs-pre sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/main postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs namespace: nova-logs - apiVersion: apps/v1 kind: Deployment name: nova-logs-dashboards namespace: nova-logs --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-post namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova interval: 10m retryInterval: 30s timeout: 5m prune: true dependsOn: - name: nova-release-logs-main sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/post postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs-logging-fluentd namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-k8s-audit-apiserver-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-node-audit-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-logs-fluentbit-fluentbit namespace: nova-logsДля высокодоступного кластера в рекомендуемой конфигурации
apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-pre namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/pre postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-main namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post - name: nova-release-logs-pre sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/main postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs namespace: nova-logs - apiVersion: apps/v1 kind: Deployment name: nova-logs-dashboards namespace: nova-logs patches: - patch: | - op: replace path: /spec/replicas value: 3 target: kind: Deployment name: "nova-logs-dashboards" namespace: nova-logs - patch: | - op: replace path: /spec/replicas value: 3 target: kind: StatefulSet name: "nova-logs" namespace: nova-logs - patch: | apiVersion: apps/v1 kind: StatefulSet metadata: name: nova-logs namespace: nova-logs spec: template: spec: containers: - name: "opensearch" env: - name: cluster.initial_master_nodes value: "nova-logs-0,nova-logs-1,nova-logs-2" --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-post namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: patches: - patch: | apiVersion: logging.banzaicloud.io/v1beta1 kind: Logging metadata: name: nova-logs-logging namespace: nova-logs spec: fluentd: scaling: replicas: 3 serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova interval: 10m retryInterval: 30s timeout: 5m prune: true dependsOn: - name: nova-release-logs-main sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/post postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs-logging-fluentd namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-k8s-audit-apiserver-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-node-audit-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-logs-fluentbit-fluentbit namespace: nova-logs -
Установите манифест в кластер Kubernetes, выполнив команду:
kubectl apply -f OpenSearch.yaml -
Проверьте состояние запущенных компонентов OpenSearch, выполнив команду:
kubectl get pods -n nova-logs
2.2. С помощью оператора
-
Установите оператор nova-ml-platform-operator. Для этого сохраните представленный ниже манифест в файл, например
OpenSearchOperator.yaml.Пример манифеста для установки nova-opensearch-operator
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: nova-opensearch-operator namespace: nova-operators spec: channel: stable installPlanApproval: Automatic name: nova-opensearch-operator source: nova-catalog sourceNamespace: nova-operatorhub startingCSV: nova-opensearch-operator.v1.0.0 -
Установите манифест в кластер Kubernetes, выполнив команду:
kubectl apply -f OpenSearchOperator.yaml -
Проверьте состояние оператора после установки.
kubectl get pods -n nova-operatorsПример вывода:NAME READY STATUS RESTARTS AGE nova-opensearch-operator-588cd5c558-gqwmj 1/1 Running 1 (44h ago) 5dУбедитесь, что оператор находится в статусе
Running. В столбцеREADYдолжно быть1/1. Ниже представлены примеры манифестов для различных конфигураций.Для кластера в минимальной конфигурации
apiVersion: opensearch.nova-platform.io/v1alpha1 kind: OpenSearchCluster metadata: name: opensearch-cluster spec: opensearch: (1) replicas: 1 (2) config: (3) immutableIndices: (4) - k8s-audit* - security-auditlog* dashboards: (5) replicas: 1 (6)-
spec.opensearch(тип: object) - конфигурация узлов OpenSearch. -
spec.opensearch.replicas(тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера -
spec.opensearch.config(тип: object) - Необязателен. Дополнительная конфигурация OpenSearch. -
spec.opensearch.config.immutableIndices(тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режимimmutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.
-
spec.dashboards(тип: object) - конфигурация OpenSearch Dashboards. -
spec.dashboards.replicas(тип: int) - количество реплик Dashboards. Должно быть >= 1.
Для высокодоступного кластера в рекомендуемой конфигурации
apiVersion: opensearch.nova-platform.io/v1alpha1 kind: OpenSearchCluster metadata: name: opensearch-cluster spec: opensearch: (1) replicas: 3 (2) config: (3) immutableIndices: (4) - k8s-audit* - security-auditlog* dashboards: (5) replicas: 3 (6)-
spec.opensearch(тип: object) - конфигурация узлов OpenSearch. -
spec.opensearch.replicas(тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера -
spec.opensearch.config(тип: object) - Необязателен. Дополнительная конфигурация OpenSearch. -
spec.opensearch.config.immutableIndices(тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режимimmutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.
-
spec.dashboards(тип: object) - конфигурация OpenSearch Dashboards. -
spec.dashboards.replicas(тип: int) - количество реплик Dashboards. Должно быть >= 1.
-
-
Установите манифест в кластер Kubernetes, выполнив команду:
kubectl apply -f OpenSearch.yaml -
Проверьте состояние запущенных компонентов OpenSearch, выполнив команду:
kubectl get pods -n nova-logs
3. Установка модуля OpenSearch с помощью Nova Console
|
В текущей версии оператор не поддерживает управление количеством экземпляров fluentd. Если необходимо увеличить их количество, рекомендуется использовать установку через кастомизацию. |
Модуль OpenSearch управляется оператором через Custom Resource OpenSearchCluster. Оператор автоматически создает и поддерживает необходимые Flux Kustomization-объекты (nova-release-logs-pre, nova-release-logs-main, nova-release-logs-post) — создавать их вручную не требуется.
Установите модуль OpenSearch через Nova Console OperatorHUB. Для этого выполните следующие шаги.
-
Установите оператор Nova OpenSearch Operator. В Nova Console в главном меню выберите Operators → OperatorHUB. Выберите Nova OpenSearch Operator. Нажмите кнопку Установить.
Заполните поля формы по примеру, представленному на скриншоте.
Подтвердите установку, нажав Установить.
-
Перейдите в раздел Operators → Установленные операторы. Выберите Nova OpenSearch Operator или сразу после установки нажмите Открыть оператор.
-
Перейдите ко вкладке OpenSearchCluster и нажмите на кнопку Создать OpenSearchCluster.
-
Заполнить настройки OpenSearch можно двумя способами:
-
С помощью формы
-
Имя - имя должно быть уникальным в пределах пространства имен.
-
Количество реплик дашборда - значение должно быть нечетным и соответствовать количеству инфраструктурных узлов.
-
Количество реплик opensearch - значение должно быть нечетным и соответствовать количеству инфраструктурных узлов.
-
-
С помощью манифеста
Для кластера в минимальной конфигурации
Подходит для тестовых и некритичных сред. В составе развертывания — один узел OpenSearch и один экземпляр Dashboards.
apiVersion: opensearch.nova-platform.io/v1alpha1 kind: OpenSearchCluster metadata: name: opensearch-cluster spec: opensearch: (1) replicas: 1 (2) config: (3) immutableIndices: (4) - k8s-audit* - security-auditlog* dashboards: (5) replicas: 1 (6)-
spec.opensearch(тип: object) - конфигурация узлов OpenSearch. -
spec.opensearch.replicas(тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера -
spec.opensearch.config(тип: object) - Необязателен. Дополнительная конфигурация OpenSearch. -
spec.opensearch.config.immutableIndices(тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режимimmutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.
-
spec.dashboards(тип: object) - конфигурация OpenSearch Dashboards. -
spec.dashboards.replicas(тип: int) - количество реплик Dashboards. Должно быть >= 1.
Для высокодоступного кластера в рекомендуемой конфигурации
Подходит для продуктивных окружений. Три узла OpenSearch образуют кворум, три реплики Dashboards обеспечивают отказоустойчивость.
Требуется не менее трех инфраструктурных узлов в кластере.
apiVersion: opensearch.nova-platform.io/v1alpha1 kind: OpenSearchCluster metadata: name: opensearch-cluster spec: opensearch: (1) replicas: 3 (2) config: (3) immutableIndices: (4) - k8s-audit* - security-auditlog* dashboards: (5) replicas: 3 (6)-
spec.opensearch(тип: object) - конфигурация узлов OpenSearch. -
spec.opensearch.replicas(тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера -
spec.opensearch.config(тип: object) - Необязателен. Дополнительная конфигурация OpenSearch. -
spec.opensearch.config.immutableIndices(тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режимimmutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.
-
spec.dashboards(тип: object) - конфигурация OpenSearch Dashboards. -
spec.dashboards.replicas(тип: int) - количество реплик Dashboards. Должно быть >= 1.
-
-
-
Нажмите Создать. Отслеживайте статус на вкладке OpenSearchCluster на странице оператора.
3.1. Установка через кастомизацию
-
Скопируйте один из представленных ниже манифестов в буфер обмена.
Для кластера в минимальной конфигурации
apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-pre namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/pre postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-main namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post - name: nova-release-logs-pre sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/main postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs namespace: nova-logs - apiVersion: apps/v1 kind: Deployment name: nova-logs-dashboards namespace: nova-logs --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-post namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova interval: 10m retryInterval: 30s timeout: 5m prune: true dependsOn: - name: nova-release-logs-main sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/post postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs-logging-fluentd namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-k8s-audit-apiserver-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-node-audit-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-logs-fluentbit-fluentbit namespace: nova-logsДля высокодоступного кластера в рекомендуемой конфигурации
apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-pre namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/pre postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-main namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova prune: true interval: 10m retryInterval: 30s timeout: 5m dependsOn: - name: nova-release-ingress-internal-main - name: nova-release-cert-manager-post - name: nova-release-logs-pre sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/main postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs namespace: nova-logs - apiVersion: apps/v1 kind: Deployment name: nova-logs-dashboards namespace: nova-logs patches: - patch: | - op: replace path: /spec/replicas value: 3 target: kind: Deployment name: "nova-logs-dashboards" namespace: nova-logs - patch: | - op: replace path: /spec/replicas value: 3 target: kind: StatefulSet name: "nova-logs" namespace: nova-logs - patch: | apiVersion: apps/v1 kind: StatefulSet metadata: name: nova-logs namespace: nova-logs spec: template: spec: containers: - name: "opensearch" env: - name: cluster.initial_master_nodes value: "nova-logs-0,nova-logs-1,nova-logs-2" --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: nova-release-logs-post namespace: nova-gitops labels: nova-application-group: logging kustomization.nova-platform.io/cluster: "true" spec: patches: - patch: | apiVersion: logging.banzaicloud.io/v1beta1 kind: Logging metadata: name: nova-logs-logging namespace: nova-logs spec: fluentd: scaling: replicas: 3 serviceAccountName: kustomize-controller commonMetadata: labels: app.kubernetes.io/managed-by: Nova interval: 10m retryInterval: 30s timeout: 5m prune: true dependsOn: - name: nova-release-logs-main sourceRef: kind: GitRepository name: nova-release-gitrepo-main path: ./resources/opensearch/post postBuild: substituteFrom: - kind: ConfigMap name: nova-gitops-common-substitute-config healthChecks: - apiVersion: apps/v1 kind: StatefulSet name: nova-logs-logging-fluentd namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-k8s-audit-apiserver-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-node-audit-host-tailer-host-tailer namespace: nova-logs - apiVersion: apps/v1 kind: DaemonSet name: nova-logs-fluentbit-fluentbit namespace: nova-logs -
Выполните вход в Nova Console.
-
Используйте опцию импорта нового объекта и вставьте в форму ранее скопированный манифест.
-
Перейдите на вкладку Администрирование → CustomResourceDefinitions. С помощью поиска найдите свой OpenSearchCluster.
-
Перейдите на вкладку Инстансы и нажмите на инстанс.
-
Перейдите на вкладку YAML. Поле
status.phaseпоказывает фазу жизненного цикла ресурса.
4. Удаление модуля OpenSearch
4.1. Удаление с помощью kubectl
Для полного удаления OpenSearch из кластера Nova выполните следующие команды:
kubectl delete kustomization nova-release-logs-post -n nova-gitops
kubectl delete kustomization nova-release-logs-main -n nova-gitops
kubectl delete kustomization nova-release-logs-pre -n nova-gitops