• Русский
  • Развертывание экземпляра Nexus

    В этом документе описывается подписка на Nexus Operator и функциональность для развертывания экземпляров Nexus.

    Ограничения уровня Pod Security Admission

    Требования к уровню Pod Security Admission (PSA) для развертывания Nexus зависят от используемого метода хранения:

    1. Хранение HostPath: уровень PSA должен быть настроен как Privileged, поскольку тома hostPath не разрешены при политике Restricted.

    2. Хранение PVC или StorageClass: Nexus может быть развернут при уровне PSA Restricted.

    Поддерживаемые уровни PSA для каждого шаблона развертывания:

    Шаблон развертыванияПоддерживаемые уровни PSA
    Quick Start TemplatePrivileged
    Production TemplatePrivileged, Baseline, Restricted

    Предварительные требования

    • Этот документ применим к версиям Nexus 3.76 и выше, предоставляемым платформой. Он отделён от платформы и основан на технологиях, таких как Operator.
    • Пожалуйста, убедитесь, что Nexus Operator был развернут (подписан) в целевом кластере, то есть Nexus Operator готов создавать экземпляры.

    Планирование развертывания

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

    Основная информация

    1. Nexus Operator, предоставляемый платформой, основан на официальном сообществом Nexus Chart с расширенными корпоративными возможностями, такими как исправления уязвимостей безопасности. Он полностью совместим с версией сообщества по функционалу и улучшает удобство развертывания Nexus за счёт опциональных, настраиваемых шаблонов и других методов.

    Развертывание экземпляра

    Развертывание из Quick Start Template

    Этот шаблон используется для быстрого создания лёгкого экземпляра Nexus, подходит для сценариев разработки и тестирования, не рекомендуется для производственных сред.

    • Вычислительные ресурсы: 2 ядра CPU, 4 Gi памяти
    • Хранение: используется локальное хранилище узла, необходимо настроить IP узла хранения и путь
    • Сетевой доступ: используется NodePort для доступа к сервису, IP узла совпадает с узлом хранения, указывается порт

    Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.

    Развертывание из Production Template

    Этот шаблон используется для быстрого создания экземпляра Nexus для производства, подходит для производственных сценариев, рекомендуется для производственных сред.

    • Вычислительные ресурсы: 4 ядра CPU, 8 Gi памяти
    • Хранение: используется PVC, необходимо настроить класс хранения
    • Сетевой доступ: используется доменное имя для доступа к сервису.

    Завершите развертывание, заполнив соответствующую информацию согласно подсказкам шаблона.

    Развертывание из YAML

    Конфигурация ресурсов

    Nexus развёртывается с помощью StatefulSet, содержащего 4 контейнера: 1 бизнес-контейнер и 3 контейнера для логирования. При настройке ресурсов основное внимание уделяется ресурсам бизнес-контейнера, тогда как контейнеры логирования могут быть развернуты с конфигурациями по умолчанию.

    spec:
      helmValues:
        statefulset:
          container:
            resources:
              requests:
                cpu: 2
                memory: "4Gi"
              limits:
                cpu: 4
                memory: "8Gi"

    Для дополнительной информации смотрите Resource description in SonarQube Chart

    Конфигурация сети

    Конфигурации сети делятся на два типа:

    • Конфигурация сети на основе ingress
    • Конфигурация сети на основе NodePort

    Конфигурация сети на основе ingress поддерживает протоколы https и http. В кластере необходимо предварительно развернуть ingress controller.

    spec:
      helmValues:
        service:
          nexus:
            enabled: true
            type: ClusterIP
        ingress:
          enabled: true
          host: test-ingress-http.example.com
          defaultRule: true
          tls:
            - secretName: "test-tls-cert"
              hosts:
                - test-ingress-https.example.com

    Конфигурация сети на основе NodePort:

    spec:
      helmValues:
        service:
          nexus:
            enabled: true
            nodePort: 30100

    Конфигурация хранения

    Конфигурации хранения в основном делятся на три категории:

    • Конфигурация хранения на основе StorageClass
    • Конфигурация хранения на основе PVC
    • Конфигурация хранения на основе HostPath

    Конфигурация хранения на основе StorageClass:

    spec:
      helmValues:
        storageClass:
          name: <storage-class> ## StorageClass должен быть создан заранее
        pvc:
          volumeClaimTemplate:
            enabled: true
          storage: 200Gi ## Настраивается в соответствии с фактическими требованиями

    Конфигурация хранения на основе PVC:

    spec:
      helmValues:
        pvc:
          existingClaim: "nexus-pvc" ## PVC должен быть создан заранее

    Конфигурация хранения на основе HostPath:

    spec:
      helmValues:
        hostPath: /data/nexus ## Выберите узел для развертывания и укажите путь хранения
    
        statefulset:
          nodeSelector:
            kubernetes.io/hostname: node1 ## Выбор узла для развертывания
        nodeSelector:
          kubernetes.io/hostname: node1

    Конфигурация учётной записи администратора

    Запишите подготовленный пароль администратора в Secret. Имя пользователя по умолчанию — admin.

    Создайте Secret, выберите тип Opaque и добавьте поле password в элементы конфигурации:

    apiVersion: v1
    data:
      password: <base64 encode password>
    kind: Secret
    metadata:
      name: nexus-password
    type: Opaque

    Укажите его для Nexus через YAML:

    spec:
      helmValues:
        secret:
          nexusAdminSecret:
            enabled: true
            existingSecret: "nexus-password"
            secretKey: "password"

    Полный пример YAML

    NodePort, HostPath, учётная запись администратора

    apiVersion: operator.alaudadevops.io/v1alpha1
    kind: Nexus
    metadata:
      name: gitlab
      namespace: aesfv-1-testns
    spec:
      helmValues:
        secret:
          nexusAdminSecret:
            enabled: true
            existingSecret: aesfv-restore-source
            secretKey: password
          nexusSecret:
            enabled: true
            secretKeyfile: |
              {
                "active": "default",
                "keys": [
                  {
                    "id": "default",
                    "key": "default-key"
                  }
                ]
              }
        statefulset:
          container:
            resources:
              requests:
                cpu: 2
                memory: 4Gi
              limits:
                cpu: 4
                memory: 8Gi
            env:
              zeroDowntimeEnabled: true
          nodeSelector:
            kubernetes.io/hostname: node1
        service:
          nexus:
            enabled: true
            nodePort: 30100
        hostPath: /tmp/nexus