Nexus 实例部署
本文档介绍了 Nexus Operator 的订阅及部署 Nexus 实例的功能。
目录
前提条件
- 本文档适用于平台提供的 Nexus 3.76 及以上版本,基于 Operator 等技术与平台解耦。
- 请确保目标集群中已部署(订阅)Nexus Operator,即 Nexus Operator 已准备好创建实例。
部署规划
Nexus 支持多种资源配置,以满足不同客户场景的需求。在不同场景下,所需资源和配置可能差异较大。因此,本节介绍在部署 Nexus 实例前需要考虑的部署规划方面,以及决策点的影响,帮助用户基于此信息进行后续具体实例部署。
基本信息
- 平台提供的 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 的存储:兼容
privileged
和 baseline
执行模式
- 节点存储:因需直接访问宿主机文件系统,需
privileged
执行模式
注意:建议生产环境使用基于 StorageClass 或 PVC 的存储,以确保更好的安全性和符合 Kubernetes 安全最佳实践。