Kubernetes 中部署 Maven 私有仓库 Sonatype Nexus3

Kubernetes 中部署 Maven 私有仓库 Sonatype Nexus3

文章目录

  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


环境说明:

  • Kubernetes 版本:1.14.0
  • Sonatype Nexus 版本:3.17.0
  • 数据持久化配置: NFS
  • 示例 Github 地址:https://github.com/my-dlq/blog-example/tree/master/kubernetes/sonatype-nexus-deploy

一、Sonatype Nexus3 简介

简介

Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 Maven仓库,极大的简化了本地内部仓库的维护和外部仓库的访问,同时是一套开箱即用的系统不需要数据库,并且还提供强大的仓库管理、构建、搜索等功能。

优点

  • 节省外网带宽
  • 加速Maven构建
  • 可以为本地建立本地内部仓库
  • 方便项目组存放各种 Jar 的管理

二、Kubernetes 部署 Sonatype Nexus3

1、创建 PV & PVC

存储驱动为 NFS,需要提前在 NFS 目录下创建对应存储文件夹并设置一定的文件夹权限,然后设置 PV 与 NFS 地址和目录绑定。

nexus-storage.yaml

 1apiVersion: v1
 2kind: PersistentVolume
 3metadata:
 4  name: sonatype-nexus
 5  labels:
 6    app: sonatype-nexus
 7spec:
 8  accessModes:       
 9  - ReadWriteOnce
10  capacity:          
11    storage: 5Gi
12  mountOptions:   #NFS挂在选项
13  - hard  
14  - nfsvers=4.1  
15  nfs:            #NFS设置
16    server: 192.168.2.11
17    path: /nfs/data/nexus
18---
19kind: PersistentVolumeClaim
20apiVersion: v1
21metadata:
22  name: sonatype-nexus
23  labels:
24    app: sonatype-nexus
25spec:
26  accessModes:
27  - ReadWriteOnce
28  resources:
29    requests:
30      storage: 5Gi  #和PV提供的容量保持一致
31  selector:
32    matchLabels:
33      app: sonatype-nexus

创建 PV & PVC

操作 kubectl 部署 PV & PVC,注意"-n"后面要指定应用所在的 Namespace

1$ kubectl apply -f nexus-storage.yaml -n mydlqcloud

2、部署 Sonatype Nexus3

nexus.yaml

 1apiVersion: v1
 2kind: Service
 3metadata:
 4  name: sonatype-nexus
 5  labels:
 6    app: sonatype-nexus
 7spec:
 8  type: NodePort
 9  ports:
10  - name: sonatype-nexus
11    port: 8081
12    targetPort: 8081
13    nodePort: 30881     #设置NodePort端口值
14    protocol: TCP
15  selector:
16    app: sonatype-nexus
17---
18apiVersion: apps/v1
19kind: Deployment
20metadata:
21  name: sonatype-nexus
22  labels:
23    app: sonatype-nexus
24spec:
25  replicas: 1
26  selector:
27    matchLabels:
28      app: sonatype-nexus
29  template:
30    metadata:
31      labels:
32        app: sonatype-nexus
33    spec:
34      containers:
35      - name: sonatype-nexus
36        image: sonatype/nexus3:3.17.0
37        imagePullPolicy: IfNotPresent
38        ports:
39        - name: server
40          containerPort: 8081
41        livenessProbe:          #存活探针
42          httpGet:
43            path: /
44            port: 8081
45          initialDelaySeconds: 30
46          periodSeconds: 30
47          failureThreshold: 6
48        readinessProbe:         #就绪探针
49          httpGet:
50            path: /
51            port: 8081
52          initialDelaySeconds: 30
53          periodSeconds: 30
54          failureThreshold: 6
55        env:
56        - name: INSTALL4J_ADD_VM_PARAMS  #设置分配资源大小,一定要等于或小于resources设置的值
57          value: "
58                  -Xms1200M 
59                  -Xmx1200M 
60                  -XX:MaxDirectMemorySize=2G 
61                  -XX:+UnlockExperimentalVMOptions 
62                  -XX:+UseCGroupMemoryLimitForHeap
63                 "
64        resources:      #资源限制
65          limits:
66            cpu: 1000m  #推荐设置为4000m以上cpu,由于资源有限,所以都是设置的最小值
67            memory: 2048Mi   
68          requests:
69            cpu: 500m
70            memory: 1024Mi
71        volumeMounts:
72        - name: sonatype-nexus-data
73          mountPath: /nexus-data
74      volumes:
75      - name: sonatype-nexus-data
76        persistentVolumeClaim:
77          claimName: sonatype-nexus     #设置为上面创建的 PVC

创建 Nexus

操作 kubectl 部署 Nexus,注意"-n"后面要指定应用所在的 Namespace

1$ kubectl apply -f nexus.yaml -n mydlqcloud

3、获取用户、密码

当 Sonatype Nexus3 创建完成后,会创建默认管理员用户"admin",且生成一个随机密码存储在持久化目录 admin.password 文件中。我们可以先获取创建的 Pod 名称,再利用 exec 命令获取容器内密码文件 /nexus-data/admin.password 内容。

注意:请替换"-n"后面的 namespace 名称

获取 Pod 名称

  • -n:Pod 所在的 namespace
1$ kubectl get pods -n mydlqcloud | grep sonatype-nexus
2
3sonatype-nexus-d66769d75-plzct  1/1  Running  0 114m

可以知道 Pod 名称为: "sonatype-nexus-d66769d75-plzct"

获取密码

  • -n:Pod 所在的 namespace
  • -i:在容器内要执行的 shell 命令
1$ kubectl exec sonatype-nexus-d66769d75-plzct -i cat /nexus-data/admin.password -n mydlqcloud
2
338da62ba-7ca5-46a3-957f-8e66b9059fdc

可以知道 Nexus 密码为: "sonatype-nexus-d66769d75-plzct"

三、访问 Sonatype Nexus 并修改初始密码

输入 Kubernetes 集群入口的 IP 地址和 Sonatype Service 端口号进入 Sonatype,例如我这里为: http://192.168.2.11:30881 ,进入后可以看到:

进入后右上角有个登录按钮,点一下后弹出登录框,用"admin"用户和上面在容器文件内获取的随机密码登录

然后会提醒修改密码,这里输入一下新密码

接下来会询问,是否开启匿名访问

然后设置完成,进入 Sonatype Nexus 页面

四、添加 Maven 代理

1、添加 Aliyun Maven 代理

由于中央仓库访问速度慢导致连接经常超时,所以这