Nexus 实例部署

本文档介绍了 Nexus Operator 的订阅及部署 Nexus 实例的功能。

目录

前提条件

  • 本文档适用于平台提供的 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"

更多信息请参考 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

通过 YAML 指定给 Nexus:

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

附加信息

Pod Security Policy

在启用 Pod Security Policy (PSP) 的命名空间中部署 Nexus,支持以下部署配置:

  • 基于 StorageClass 和 PVC 的存储:兼容 privilegedbaseline 执行模式
  • 节点存储:因需直接访问宿主机文件系统,需 privileged 执行模式

注意:建议生产环境使用基于 StorageClass 或 PVC 的存储,以确保更好的安全性和符合 Kubernetes 安全最佳实践。