发布时间:2025-12-09 12:00:40 浏览次数:1
Nexus3 是一个统一的仓库系统,常见的有诸如apt、docker、maven2、npm、pypi、yum等repositories。如果开发工程师在开发软件时没有一个统一的repositories地址,那么将会受到不必要的影响,降低开发迭代效率。而Nexus3 就是这么一个平台,可以统一管理repositories仓库。这里文章介绍如何在k8s环境部署Nexus3,并快速使用,作为docker images 私有仓库。
#创建namespace - nexusapiVersion: v1kind: Namespacemetadata: name: nexus#创建 pv,这里使用aliyun的nas作为pvapiVersion: v1kind: PersistentVolumemetadata: name: nexus-pv name: nexus labels: alicloud-nfs: nexus-pvspec: capacity: storage: 500Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: "xxxxx.cn-hangzhou.nas.aliyuncs.com" path: /nexus/#创建pvc,注意labels对齐kind: PersistentVolumeClaimapiVersion: v1metadata: name: nexus-pvc namespace: nexusspec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi selector: matchLabels: alicloud-nfs: nexus-pv#创建nexus deployment,这里containers端口开放了8081、8082、8083分别作为web管理页面、docker repo、maven repo,且通过traefik2将web、docker域名开放apiVersion: apps/v1kind: Deploymentmetadata: name: nexus-deployment namespace: nexusspec: replicas: 1 selector: matchLabels: app: nexus template: metadata: labels: app: nexus spec: containers: - name: nexus image: sonatype/nexus3 ports: - containerPort: 8081 - containerPort: 8082 - containerPort: 8083 resources: requests: memory: "128Mi" limits: memory: "2Gi" cpu: 4 volumeMounts: - mountPath: /nexus-data name: nexus-data volumes: - name: nexus-data persistentVolumeClaim: claimName: nexus-pvc---apiVersion: v1kind: Servicemetadata: name: nexus-svc namespace: nexusspec: selector: app: nexus ports: - name: web protocol: TCP port: 8081 targetPort: 8081 - name: docker protocol: TCP port: 8082 targetPort: 8082 - name: maven protocol: TCP port: 8083 targetPort: 8083---apiVersion: traefik.containo.us/v1alpha1kind: IngressRoutemetadata: name: nexus namespace: nexusspec: entryPoints: - http routes: - match: Host(`nexus3.domain.com`) && PathPrefix(`/`) kind: Rule priority: 1 middlewares: - name: compress namespace: default services: - name: nexus-svc namespace: nexus port: 8081 - match: Host(`repo-nexus.domain.com`) && PathPrefix(`/`) kind: Rule priority: 1 middlewares: - name: compress namespace: default services: - name: nexus-svc namespace: nexus port: 8082按顺序分别kubectl apply部署nexus3,部署完成后可查看相关nexus资源。
当我们首次登陆 nexus3.domain.com 的web界面的时候,需要输入admin的用户密码,这里需要通过查看nexus pods下面的/nexus-data/admin.password文件,
#kubectl exec -n nexus nexus-deployment-697b6f5945-jkzst cat /nexus-data/admin.passwordmsNPSKNbX05BwV9V将输出的msNPSKNbX05BwV9V作为admin密码。
可以看到有个感叹号提醒,Nexus3建议至少使用4核CPU,这里使用2C,并无太大关系,如果有强迫症的同学可以增大CPU核数 >= 4C。
1.点击系统配置 - Repositories - Create repository
2.选择docker(hosted)
3.创建一个name为docker-repo,选择8082作为http入口(如果需要https,可以在k8s上在增加一个Nexus端口作为https端口,同nexus deployment中的 ports.docker)
4.点击save,创建完docker repo后,就可以通过Browse看到docker-repo已经online在线。
由于使用的http协议,需要修改/etc/docker/daemon.json配置文件,
{"insecure-registries": ["repo-nexus.k8s.stdomai.com"]}1.docker login repo-nexus.domain.com输入admin用户密码,如果不想用admin用户登陆的,可以在Nexus3创建一个新的使用用户。
2.docker tag 172.16.10.13/library/java:latest repo-nexus.domain.com/java:simba_latest3.docker push repo-nexus.domain.com/java:simba_latest
docker pull repo-nexus.domain.com/java:simba_latest