这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
生活是属于每个人自己的感受,不属于任何别人的看法。—— 余华《活着》
一. 概述
在学习使用一个工具之前,我们需要知道怎么安装它。本文将自己学习的过程记录下来,一方面巩固学习的内容,另一方面希望对有同样需求的小伙伴提供一些帮助。
开源工具 | 描述 | 官方文档 | 官方安装文档 | docker 安装 |
---|---|---|---|---|
nexus | maven 仓库管理工具 | nexus 官网 | nexus 快速安装 | docker 安装 |
上面表格列出了官方的安装地址,如果需要快速体验使用,建议直接使用 docker 安装,一行命令就可以启动应用:
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
下文将介绍在 k8s 中安装并使用 nexus,这里将使用两种方式安装:
-
自己编写部署清单
nexus-deploy.yaml
安装 -
使用 helm 安装
安装环境
这里使用 minikube 进行安装,在 k8s 集群中基本使用是一样的
- minikube : v1.18.1
- helm : v3.5.3
二. 编写部署清单 nexus-deploy.yaml
安装
由于 nexus 需要持久化数据,所以我们需要创建 PVC
,建议使用 storageClass
动态创建 PVC
,在 minikube
中有一个默认的 storageClass
,名称是:standard
,可以使用下面的命令查看:
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
standard (default) k8s.io/minikube-hostpath Delete Immediate false 50m
storageClass 的使用可以查看官网:kubernetes.io/zh/docs/con…
创建 nexus-deploy.yaml
文件,文件内容如下:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nexus-data-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
# 指定 storageClass 的名字,这里使用默认的 standard
storageClassName: "standard"
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: default
name: nexus3
labels:
app: nexus3
spec:
replicas: 1
selector:
matchLabels:
app: nexus3
template:
metadata:
labels:
app: nexus3
spec:
containers:
- name: nexus3
image: sonatype/nexus3:3.32.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
name: web
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 8081
initialDelaySeconds: 100
periodSeconds: 30
failureThreshold: 6
readinessProbe:
httpGet:
path: /
port: 8081
initialDelaySeconds: 100
periodSeconds: 30
failureThreshold: 6
resources:
limits:
cpu: 4000m
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
volumeMounts:
- name: nexus-data
mountPath: /nexus-data
volumes:
- name: nexus-data
persistentVolumeClaim:
claimName: nexus-data-pvc
apiVersion: v1
kind: Service
metadata:
name: nexus3
namespace: default
labels:
app: nexus3
spec:
selector:
app: nexus3
type: ClusterIP
ports:
- name: web
protocol: TCP
port: 8081
targetPort: 8081
使用如下命令部署应用:
# kubectl apply -f nexus-deploy.yaml
deployment.apps/nexus3 created
persistentvolumeclaim/nexus-data-pvc created
service/nexus3 created
使用如下命令查看 pod 是否正常运行:
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nexus3-6c75965bcf-6tj5w 1/1 Running 0 5m37s
使用如下命令查看 pod 的日志:
kubectl logs -f nexus3-6c75965bcf-6tj5w -n default
看到如下内容,则表示应用启动成功:
使用如下命令暴露 pod 端口到本机,以便外部访问:
# 使用说明: kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT
kubectl port-forward service/nexus3 8081:8081
生产使用建议通过 ingress 暴露服务,这里通过 port-forward 临时暴露服务
默认登录 nexus 的账号和密码如下:
- 用户名:admin
- 密码:默认的初始密码在服务器的
/nexus-data/admin.password
文件中
使用下面的命令获取默认的密码:
kubectl exec nexus3-6c75965bcf-6tj5w -- cat /nexus-data/admin.password
登录 nexus:
登录成功后需要设置新密码:
更新密码后,配置是否开启匿名访问。启用匿名访问意味着默认情况下,用户可以在没有凭据的情况下从存储库搜索、浏览和下载组件。考虑到安全的问题,这里选择禁用匿名访问。
安装完成后如下图:
可以使用下面的命令删除安装的 nexus 相关的资源:
# kubectl delete -f nexus-deploy.yaml
deployment.apps "nexus3" deleted
persistentvolumeclaim "nexus-data-pvc" deleted
service "nexus3" deleted
三. 使用 helm 安装 nexus
可以去到 helm 官方包管理仓库查找需要安装的应用。
helm 包管理地址:artifacthub.io/
这里我选择安装下图所示的 nexus:(可以根据自己的需求选择安装 star 比较多,更新比较频繁的 chart)
下面将根据文档说明进行安装:
使用下面的命令添加 helm 仓库:
helm repo add sonatype https://sonatype.github.io/helm3-charts/
使用下面的命令更新仓库:
helm repo update
使用下面的命令搜索 nexus:
helm search repo nexus
使用下面的命令下载 chart 到本地:
helm pull sonatype/nexus-repository-manager
下载下来的是一个压缩包,可以通过 tar -zxvf
命令解压,根据需要修改其中的 values.yaml
文件,修改完成后可以通过下面的命令安装 nexus:
helm install sonatype-nexus ./
如果不需要自定义配置,可以直接使用下面的命令安装:
helm install nexus-rm sonatype/nexus-repository-manager