在 k8s 中安装并使用 nexus(一)

1,791 阅读4分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

生活是属于每个人自己的感受,不属于任何别人的看法。—— 余华《活着》

一. 概述

在学习使用一个工具之前,我们需要知道怎么安装它。本文将自己学习的过程记录下来,一方面巩固学习的内容,另一方面希望对有同样需求的小伙伴提供一些帮助。

开源工具描述官方文档官方安装文档docker 安装
nexusmaven 仓库管理工具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

看到如下内容,则表示应用启动成功:

image-20210729165631435.png

使用如下命令暴露 pod 端口到本机,以便外部访问:

# 使用说明: kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT
kubectl port-forward service/nexus3 8081:8081

生产使用建议通过 ingress 暴露服务,这里通过 port-forward 临时暴露服务

访问地址:http://localhost:8081/

image-20210729170308091.png

默认登录 nexus 的账号和密码如下:

  • 用户名:admin
  • 密码:默认的初始密码在服务器的/nexus-data/admin.password文件中

使用下面的命令获取默认的密码:

kubectl exec nexus3-6c75965bcf-6tj5w -- cat /nexus-data/admin.password

登录 nexus:

image-20210729170954974.png 登录成功后需要设置新密码:

image-20210729171048029.png

更新密码后,配置是否开启匿名访问。启用匿名访问意味着默认情况下,用户可以在没有凭据的情况下从存储库搜索、浏览和下载组件。考虑到安全的问题,这里选择禁用匿名访问。

image-20210729171234299.png

安装完成后如下图:

image-20210729173103501.png

可以使用下面的命令删除安装的 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/

image-20210729174516988.png

这里我选择安装下图所示的 nexus:(可以根据自己的需求选择安装 star 比较多,更新比较频繁的 chart)

image-20210729180019204.png

下面将根据文档说明进行安装:

使用下面的命令添加 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