Установка Helm-чарта¶
Общий порядок¶
- Получите архив Helm-чарта
appsec-registry(каталог сChart.yaml,values.yaml,templates/). - Подготовьте файл values под свой профиль (см. сценарии ниже).
-
Установите зависимости и release:
cd <chart-directory> helm dependency build . helm install <release> . \ -n <namespace> \ --create-namespace \ -f my-values.yaml -
Проверьте состояние:
kubectl get pods,svc,ingress,pvc -n <namespace> helm list -n <namespace> -
После install Helm выводит NOTES с URL core и UI; при включённом SeaweedFS — S3 endpoint и статус blob store Job.
Обновление:
helm upgrade <release> . -n <namespace> -f my-values.yaml
Имя release
Сохраняйте одно имя release при upgrade — от него зависят имена PVC ({fullname}-data, {fullname}-nexus-data).
Лицензия¶
Передайте лицензию Nexus одним из способов:
credentials:
nexus:
license:
contentBase64: "<base64 содержимого .lic>"
или при установке:
helm install ... --set-file credentials.nexus.license.contentBase64=/path/to/license.b64
где license.b64 получен командой base64 -w0 nexus-repo-license.lic.
Сценарий A — Standalone embedded (dev/test)¶
Встроенная OrientDB в PVC, без PostgreSQL.
registryCore:
clustered: false
storage:
enabled: true
size: 8Gi
database:
mode: embedded
credentials:
provider: helm
nexus:
license:
contentBase64: "" # заполнить
registryUi:
replicaCount: 1
Сценарий B — Standalone с CNPG PostgreSQL¶
Рекомендуемый профиль для production без HA core.
database:
mode: cnpg
cnpg:
enabled: true
crds:
create: false # true, если CRD ещё нет в кластере
cluster:
enabled: true
instances: 1
storage:
size: 20Gi
registryCore:
clustered: false
storage:
enabled: true
credentials:
provider: helm
database:
password: "<secure-password>"
nexus:
adminPassword: "<admin-password>"
license:
contentBase64: "<license-b64>"
registryUi:
replicaCount: 1
ingress:
enabled: true
host: registry.example.com
defaultRule: true
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
Пароль admin используется при первом входе и post-install Jobs (blobStore, trustStore).
Сценарий C — Dev/test с in-cluster S3 (SeaweedFS)¶
Хранение артефактов в S3 внутри кластера. Только для dev/test (SeaweedFS allInOne — single point of failure).
credentials:
nexus:
adminPassword: admin123
seaweedfs:
enabled: true
allInOne:
enabled: true
data:
size: 10Gi
s3:
enableAuth: true
existingConfigSecret: seaweedfs-s3-config
credentials:
admin:
accessKey: "<generated>"
secretKey: "<generated>"
createBuckets:
- name: dev-bucket
blobStore:
enabled: true
name: dev-s3-blobstore
bucket: dev-bucket
prefix: nexus/
Синхронизация credentials S3
Если заданы seaweedfs.s3.credentials.admin.*, обязательно укажите seaweedfs.s3.existingConfigSecret (чарт создаст Secret seaweedfs-s3-config). Иначе SeaweedFS сгенерирует другие ключи, и Nexus blob store Job получит HTTP 403.
Post-install Job создаёт blob store через POST /service/rest/v1/blobstores/s3. Репозитории настраиваются отдельно; default repos остаются на file blob store default.
Сценарий D — HA clustered¶
StatefulSet с несколькими репликами core и PostgreSQL (CNPG или external).
database:
mode: cnpg
cnpg:
enabled: true
cluster:
enabled: true
instances: 3
registryCore:
clustered: true
replicaCount: 3
storage:
perPod: true
size: 20Gi
credentials:
provider: helm
database:
password: "<secure-password>"
nexus:
adminPassword: "<admin-password>"
license:
contentBase64: "<license-b64>"
registryUi:
replicaCount: 2
В HA blob store Job обращается к каждому pod core через headless Service ({pod}.{release}-hl:8081), т.к. конфиг blob store локален на ноде. Trust store Job достаточно вызвать один раз через Service (данные в общей PostgreSQL).
Ingress controller в namespace (dev)¶
Если в кластере нет общего ingress:
ingressNginx:
enabled: true
ingress:
enabled: true
host: registry.example.com
ingressClassName: nginx
defaultRule: true
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
ingress.ingressClassName должен совпадать с ingressNginx.controller.ingressClassResource.name (по умолчанию nginx).
Trust store (опционально)¶
Включение Use the Nexus Repository Truststore на proxy-репозиториях — в UI или API после установки.
Проверка после установки¶
kubectl get pods -n <namespace> -w
kubectl logs -n <namespace> -l app.kubernetes.io/name=appsec-registry --tail=50
Откройте UI по Ingress host или port-forward:
kubectl port-forward -n <namespace> svc/<release>-ui 8080:8080
Подробный справочник параметров — configuration.md.