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

Установка модуля OpenSearch

1. Предварительные условия

  • Вы ознакомились с архитектурой и концепциями OpenSearch в Nova Container Platform.

  • Вы ознакомились с документацией по планированию установки и системным требованиям OpenSearch.

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes.

  • Вы установили утилиту kubectl для работы с Kubernetes.

2. Установка модуля OpenSearch с помощью kubectl

  1. Сохраните один из представленных ниже манифестов в файл, например, 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)
      1. spec.opensearch (тип: object) - конфигурация узлов OpenSearch.

      2. spec.opensearch.replicas (тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера

      3. spec.opensearch.config (тип: object) - Необязателен. Дополнительная конфигурация OpenSearch.

      4. spec.opensearch.config.immutableIndices (тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режим immutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.

        Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.

      5. spec.dashboards (тип: object) - конфигурация OpenSearch Dashboards.

      6. 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)
      1. spec.opensearch (тип: object) - конфигурация узлов OpenSearch.

      2. spec.opensearch.replicas (тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера

      3. spec.opensearch.config (тип: object) - Необязателен. Дополнительная конфигурация OpenSearch.

      4. spec.opensearch.config.immutableIndices (тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режим immutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.

        Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.

      5. spec.dashboards (тип: object) - конфигурация OpenSearch Dashboards.

      6. spec.dashboards.replicas (тип: int) - количество реплик Dashboards. Должно быть >= 1.

  2. Установите манифест в кластер Kubernetes, выполнив команду:

    kubectl apply -f OpenSearch.yaml

  3. Проверьте состояние запущенных компонентов OpenSearch, выполнив команду:

    kubectl get pods -n nova-logs

  4. Проверьте состояние Cluster Kustomizations, выполнив команду:

    kubectl get ks -l nova-application-group=logging -n nova-gitops

3. Установка модуля OpenSearch с помощью Nova Console

  1. Скопируйте один из представленных ниже манифестов в буфер обмена. Установить 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)
      1. spec.opensearch (тип: object) - конфигурация узлов OpenSearch.

      2. spec.opensearch.replicas (тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера

      3. spec.opensearch.config (тип: object) - Необязателен. Дополнительная конфигурация OpenSearch.

      4. spec.opensearch.config.immutableIndices (тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режим immutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.

        Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.

      5. spec.dashboards (тип: object) - конфигурация OpenSearch Dashboards.

      6. 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)
      1. spec.opensearch (тип: object) - конфигурация узлов OpenSearch.

      2. spec.opensearch.replicas (тип: int) - количество реплик OpenSearch. Допустимые значения: нечетные числа >= 1. Не может превышать количество инфраструктурных узлов кластера

      3. spec.opensearch.config (тип: object) - Необязателен. Дополнительная конфигурация OpenSearch.

      4. spec.opensearch.config.immutableIndices (тип: []string) - Необязателен. Список индексов, которые будут защищены от изменения и удаления. Данный параметр позволяет объявить список индексов OpenSearch неизменяемыми. Для указанных индексов подсистема безопасности OpenSearch (Security Compliance) активирует режим immutable_indices: любые операции изменения или удаления документов в таких индексах будут запрещены. Индексы становятся доступны только для записи новых документов и чтения.

        Индекс, указанный в immutableIndices, должен существовать в OpenSearch до применения настройки. Добавление несуществующего индекса не вызывает ошибку, но настройка применится только после создания индекса.

      5. spec.dashboards (тип: object) - конфигурация OpenSearch Dashboards.

      6. spec.dashboards.replicas (тип: int) - количество реплик Dashboards. Должно быть >= 1.

  2. Выполните вход в Nova Console.

  3. Используйте опцию импорта нового объекта и вставьте в форму ранее скопированный манифест.

  4. Перейдите в раздел Ресурсы  Pods и выберите Namespace nova-logs. Проверьте состояние запущенных компонентов OpenSearch.

  5. Перейдите в раздел Администрирование  Настройки, на вкладке Конфигурация компонентов выберите 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