Установка модуля OpenSearch
1. Предварительные условия
-
Вы ознакомились с архитектурой и концепциями OpenSearch в Nova Container Platform.
-
Вы ознакомились с документацией по планированию установки и системным требованиям OpenSearch.
-
У вас есть доступ к кластеру с учетной записью, имеющей роль
cluster-adminв Kubernetes. -
Вы установили утилиту
kubectlдля работы с Kubernetes.
2. Установка модуля OpenSearch с помощью kubectl
-
Сохраните один из представленных ниже манифестов в файл, например,
OpenSearch.yaml. Установить OpenSearch можно двумя способами:-
С помощью кастомизации. Ниже предоставлены примеры манифестов для различных конфигураций.
Для кластера в минимальной конфигурации
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-apps-operator.
В текущей версии оператор не поддерживает управление количеством экземпляров fluentd. Если необходимо увеличить их количество, рекомендуется использовать установку через кастомизацию.
Ниже предоставлены примеры манифестов для различных конфигураций.
Для кластера в минимальной конфигурации
apiVersion: apps.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: apps.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 -
Проверьте состояние Cluster Kustomizations, выполнив команду:
kubectl get ks -l nova-application-group=logging -n nova-gitops
3. Установка модуля OpenSearch с помощью Nova Console
-
Скопируйте один из представленных ниже манифестов в буфер обмена. Установить OpenSearch можно двумя способами:
-
С помощью кастомизации. Ниже предоставлены примеры манифестов для различных конфигураций.
Для кластера в минимальной конфигурации
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-apps-operator.
В текущей версии оператор не поддерживает управление количеством экземпляров fluentd. Если необходимо увеличить их количество, рекомендуется использовать установку через кастомизацию.
Ниже предоставлены примеры манифестов для различных конфигураций.
Для кластера в минимальной конфигурации
apiVersion: apps.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: apps.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.
-
-
-
Выполните вход в Nova Console.
-
Используйте опцию импорта нового объекта и вставьте в форму ранее скопированный манифест.
-
Перейдите в раздел и выберите Namespace
nova-logs. Проверьте состояние запущенных компонентов OpenSearch. -
Перейдите в раздел , на вкладке Конфигурация компонентов выберите Cluster Kustomizations. Проверьте состояние Cluster Kustomizations с именем
nova-release-logs.
4. Удаление модуля OpenSearch
Для полного удаления 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