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 代理
由于中央仓库访问速度慢导致连接经常超时,所以这里添加一个 Aliyun 的 Maven 仓库代理,用于优先从 Aliyun 中拉取相关 JAR。
打开 Repositories->Create repository->maven2(proxy) 并设置要代理的 Maven 仓库名称与地址。
设置“仓库名称”与“仓库地址”。
- aliyun 仓库地址:http://maven.aliyun.com/nexus/content/groups/public/
保存上面设置后回到仓库页面,可以看到已经添加了一个新的仓库。
2、设置 Aliyun Maven 优先级
打开 Repositories->maven public 并设置代理仓库优先级置顶
将 Aliyun 仓库添加到 Members 一栏,然后将其位置置顶。
五、Maven 设置私服仓库配置
设置 Mavne 的 Settings.xml 文件,按照下面配置进行设置私服地址和验证的用户名、密码。
1<?xml version="1.0" encoding="UTF-8"?>
2
3<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
6
7 <pluginGroups>
8 </pluginGroups>
9
10 <proxies>
11 </proxies>
12
13 <servers>
14 <!-- 设置私有Nexus仓库的用户名/密码 -->
15 <server>
16 <id>nexus</id>
17 <username>admin</username>
18 <password>123456</password>
19 </server>
20 </servers>
21
22 <mirrors>
23 <!-- 设置私有仓库地址 -->
24 <mirror>
25 <id>nexus</id>
26 <name>my-nexus</name>
27 <mirrorOf>central</mirrorOf>
28 <url>http://192.168.2.11:30881/repository/maven-public/</url>
29 </mirror>
30 </mirrors>
31
32 <profiles>
33 </profiles>
34
35</settings>
六、创建项目进行测试
1、拉取测试
创建一个 Java Maven 项目,且 Pom.xml 中随便引用一个公网相关项目,查看能否正常拉取,如果能就就代表配置没有问题。
pom.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>club.mydlq</groupId>
7 <artifactId>nexus-maven-test</artifactId>
8 <version>0.0.1</version>
9 <name>nexus-maven-test</name>
10
11 <properties>
12 <java.version>1.8</java.version>
13 </properties>
14
15 <dependencies>
16 <dependency>
17 <groupId>com.github.seratch</groupId>
18 <artifactId>jslack</artifactId>
19 <version>1.7.3</version>
20 </dependency>
21 </dependencies>
22
23</project>
然后能看到能够正常拉取。
2、推送设置
这里用一个示例项目,配置好 Maven 仓库的参数,然后执行 Deploy 命令将其推送到私有仓库进行测试,看其是否能够推送成功。
pom.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>club.mydlq</groupId>
7 <artifactId>nexus-maven-test</artifactId>
8 <version>0.0.1</version>
9 <name>nexus-maven-test</name>
10
11 <properties>
12 <java.version>1.8</java.version>
13 </properties>
14
15 <distributionManagement>
16 <!-- Maven 上传设置 -->
17 <repository>
18 <id>nexus</id> <!-- 保持和Settings.xml中配置的Server ID一致 -->
19 <name>releases</name>
20 <url>http://192.168.2.11:30881/repository/maven-releases/</url> <!-- 推送到Maven仓库的maven-releases下 -->
21 </repository>
22 </distributionManagement>
23
24</project>
执行 Maven 的 Deploy 命令,将项目推送到 Maven 私有仓库
1$ mvn deploy
推送成功查看 Nexus 下的 maven-releases 仓库里面,可以看到已经推送成。
--END--
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。