Index
Документация по установке и использованию Nexus Repository Manager через m88i Nexus Operator.
Оглавление
- Описание
- Быстрый старт
- Архитектура
- Команды
- Конфигурация
- Подключение
- Troubleshooting
- UI «Initializing» и JVM deadlock
Описание
m88i Nexus Operator - Kubernetes оператор для управления инстансами Nexus Repository Manager.
Возможности
- ✅ Управление Nexus инстансами через CRD
- ✅ Persistent storage
- ✅ Автоматическое развертывание и обновление
- ✅ Минимальное использование ресурсов
Текущая конфигурация
- Operator namespace:
tech-nexus-operator - Instances namespace:
tech-nexus-instances - Storage: Longhorn (40Gi, StorageClass:
longhorn-nexus) - Placement: Operator и Nexus поды могут размещаться на любых нодах (masters + workers)
- Resources: 250m-1 CPU, 512Mi-2Gi RAM
Быстрый старт
1. Подготовка нод
Подготовка нод выполняется автоматически через Ansible playbook:
1 | |
Это добавит:
- На master нодах: label node-role.kubernetes.io/control-plane=true и taint node-role.kubernetes.io/control-plane:NoSchedule
- На worker нодах: label node-role.kubernetes.io/worker=true
2. Установка Operator
1 2 | |
Это установит m88i Nexus Operator через Helm chart из официального репозитория.
3. Создание инстанса
1 | |
Это создаст:
- StorageClass longhorn-nexus
- Nexus инстанс nexus-tech с 40Gi storage
4. Проверка статуса
1 | |
5. Доступ к Nexus
1 | |
Затем откройте в браузере: http://localhost:8081
Архитектура
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Команды
Управление
1 2 3 4 5 6 7 | |
Справка
1 | |
Конфигурация
Operator
Оператор устанавливается через Helm chart из официального репозитория:
- Helm chart: m88i/nexus-operator версия 0.8.0
- Helm repository: https://m88i.github.io/helm-charts/
- CRDs устанавливаются автоматически при установке Helm chart
- ServiceAccount, Role, RoleBinding создаются автоматически
Инстанс nexus-tech
Конфигурация в manifests/nexus-operator/nexus-tech.yaml:
- Image: Официальный образ Nexus (не Red Hat)
- Storage: 40Gi (Longhorn, StorageClass:
longhorn-nexus) - Resources: 250m-1 CPU, 512Mi-2Gi RAM
- Node placement: Любые ноды (masters + workers)
- Networking: Без Ingress и LoadBalancer (доступ через port-forward)
StorageClass
StorageClass longhorn-nexus создается автоматически при создании инстанса:
- Provisioner: driver.longhorn.io
- Replicas: 1
- Reclaim policy: Delete
- Volume binding: Immediate
- Size: 40Gi
Подключение
Service Endpoint
1 | |
Доступ через port-forward
1 | |
Затем откройте в браузере: http://localhost:8081
Получение пароля администратора
Пароль администратора хранится в секрете, созданном оператором:
1 2 3 | |
Примечание: При первом запуске Nexus может создать пароль администратора автоматически. Проверьте логи пода для получения начального пароля:
1 | |
Подключение из приложения
1 2 3 4 5 6 7 8 9 10 | |
Troubleshooting
Проверка статуса оператора
1 2 | |
Проверка статуса инстанса
1 2 3 4 5 6 7 8 | |
Проблемы с PVC
1 2 3 4 5 | |
Проблемы с доступом
1 2 3 4 5 6 7 8 | |
Пересоздание инстанса
1 2 3 4 5 | |
Проблемы с памятью
Если Nexus не запускается из-за нехватки памяти:
-
Проверьте доступную память на нодах:
1kubectl top nodes -
Увеличьте лимиты в
manifests/nexus-operator/nexus-tech.yaml:1 2 3 4 5
resources: requests: memory: "1Gi" limits: memory: "4Gi" -
Примените изменения:
1kubectl apply -f manifests/nexus-operator/nexus-tech.yaml
UI «Initializing» и JVM deadlock
Симптом: веб-интерфейс Nexus долго или бесконечно показывает Initializing при этом одинаково через Ingress и через kubectl port-forward (значит не nginx/Authentik, а процесс Nexus).
Суть: у JVM Nexus случается deadlock между Logback (блокировки LogbackLock / BasicStatusManager) и цепочкой Shiro / SessionServlet. REST-запросы с учётными данными перестают отвечать, а раздача / и статики может ещё работать.
Быстрая проверка из контейнера (подставьте namespace и имя пода, для Helm-чарта stevehipwell/nexus3 обычно tech-nexus / nexus-tech-nexus3-0, контейнер nexus3):
1 2 3 4 5 6 7 8 9 10 | |
Файл /nexus-data/admin.password содержит начальный пароль; после смены пароля в мастере он может не совпадать с реальным — для проверки используйте актуальный пароль admin.
Подтвердить deadlock: отправить JVM SIGQUIT (треддамп в лог) и поискать deadlock / waiting to lock:
1 2 3 | |
Быстрое восстановление: перезапуск пода (например kubectl delete pod -n tech-nexus nexus-tech-nexus3-0 — StatefulSet поднимет новый).
Профилактика: не оставлять внутри пода зависшие curl к REST с логином; по возможности обновить образ sonatype/nexus3 (старые версии чаще страдают от багов вокруг логирования); следить за ошибками logback в логах (например replicationAppender).
См. также Sonatype: UI hangs on Initializing due to 500 on extdirect — другая частая причина «Initializing» (битый/очищенный tmp/nexus-extdirect), отличайте по коду ответа и Network в браузере.
Использование Nexus
Первый вход
-
Запустите port-forward:
1make nexus-port-forward -
Откройте http://localhost:8081
-
Получите начальный пароль администратора:
1kubectl -n tech-nexus-instances logs -l app=nexus | grep -i "admin password" -
Войдите с учетными данными:
- Username:
admin -
Password: (из логов или секрета)
-
При первом входе Nexus попросит изменить пароль.
Настройка репозиториев
После входа в Nexus можно настроить репозитории:
- Maven (hosted): Для публикации артефактов
- Maven (proxy): Для проксирования внешних репозиториев (Maven Central)
- Maven (group): Для группировки репозиториев
- Docker (hosted): Для хранения Docker образов
- Docker (proxy): Для проксирования Docker Hub
- npm (hosted/proxy): Для npm пакетов
- И другие типы репозиториев
Примеры использования
Maven
1 2 3 4 5 6 | |
Docker
1 | |
Дополнительные ресурсы
- m88i Nexus Operator GitHub
- Nexus Repository Manager Documentation
- Nexus Repository Manager User Guide