乐趣区

关于kubernetes:在-k8s-中安装并使用-nexus

生存是属于每个人本人的感触,不属于任何他人的认识。—— 余华《活着》

一. 概述

在学习应用一个工具之前,咱们须要晓得怎么装置它。本文将本人学习的过程记录下来,一方面坚固学习的内容,另一方面心愿对有同样需要的小伙伴提供一些帮忙。

开源工具 形容 官网文档 官网装置文档 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 的应用能够查看官网:https://kubernetes.io/zh/docs…

创立 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 长期裸露服务

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

默认登录 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 包治理地址:https://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

四. nexus 的根本配置及应用

1. nexus 配置阐明

点击左侧 Repositories 按钮,能够看到下图所示的仓库内容:

仓库阐明:

Name 列

  • maven-central:maven 地方库,默认从 https://repo1.maven.org/maven2/ 拉取 jar。
  • maven-releases:私库发行版 jar。
  • maven-snapshots:私库快照版(调试版本)jar。
  • maven-public:仓库分组,把下面三个仓库组合在一起对外提供服务,在本地 maven 根底配置 settings.xml中应用。

Type 列(Nexus 默认的仓库类型有以下四种):

  • group(仓库组类型):又叫组仓库,用于不便开发人员本人抉择仓库以及设置仓库的程序;
  • hosted(宿主类型):外部我的项目的公布仓库(外部开发人员公布 jar 包寄存的仓库);
  • proxy(代理类型):从近程地方仓库中寻找数据的仓库(能够点击对应的仓库的 Configuration 页签,其中 Remote Storage Location 属性的值即被代理的近程仓库的门路);
  • virtual(虚构类型):虚构仓库(这个根本用不到,重点关注下面三个仓库的应用);

2. 创立自定义公有仓库

自定义发行版(release)私库

点击 Create repository 创立自定义发行版(release)私库,抉择 maven2 (hosted),如下图所示:

自定义仓库配置如下:

次要配置如下几项内容:

Name:自定义名称,必须惟一,通常发行版仓库以 xxx-release 结尾,快照版仓库以 xxx-snapshots 结尾

Version policy

  • Release 个别是发行版的 jar
  • Snapshot 个别是快照版的 jar
  • Mixed 混合的

Deployment policy:Allow redeploy

其余的配置放弃默认即可。

自定义快照版(snapshot)私库

创立快照版(snapshot)私库和下面的一样,只须要将 Name 批改为 xxx-snapshotsVersion policy 批改为 Snapshot,如下图所示:

自定义代理(proxy)仓库

默认从 https://repo1.maven.org/maven2/ 拉取 jar,因为网络的起因常常导致无奈下载相干的资源,所以这里介绍配置阿里云的 maven 仓库代理。

阿里云 maven 仓库代理配置:https://maven.aliyun.com/mvn/…

创立代理仓库:

配置内容如下图:

配置阐明:

Name:仓库的名称必须惟一,这里配置为 aliyun-proxy

Version policy:Release

Remote storage:近程仓库地址,这里配置阿里云 maven 仓库地址:https://maven.aliyun.com/repository/public

自定义 group 仓库的程序

能够应用默认的 maven-public,也能够自定义一个 maven2 (group) 类型的仓库进行设置,这里抉择自定义一个maven2 (group) 类型的仓库,不便学习了解。

配置如下图:

3. 创立 nexus 用户

五. maven 配置 nexus 阐明

点击后面定义的 maven2 (group) 查看其 URL 地址,如下图所示:

1. 在 settings.xml 文件中配置(全局无效)

关上 maven 的配置文件(windows 机器个别在 maven 装置目录的 conf/settings.xml),在 <mirrors></mirrors> 标签中增加 mirror 子节点,复制下面的地址,在 settings.xml 文件中增加如下内容:

  <servers>
    <!-- 这里配置 nexus 的认证信息,留神这里的 id 须要和 mirros 中的 id 雷同才可能匹配认证 -->
    <server>
      <id>my-maven</id>
      <username>test</username>
      <password>maven123456</password>
    </server>
  </servers>
  <mirrors>
    <mirror>
      <id>my-maven</id>
      <!--mirrorof 配置为 * 时,所有的申请都走这个 mirror 的 url,mirrorof 配置是某个 repositoryid 时,若构建找不到,则会到 maven 默认地方仓库去获取的。-->
      <mirrorOf>*</mirrorOf>
      <name> 自定义公有仓库 </name>
      <url>http://localhost:8081/repository/my-group/</url>
    </mirror>
  </mirrors>

配置实现之后,能够在 idea 中指定这个 settings.xml 文件,如下图所示:

当指定配置文件之后,能够看到 idea 从 nexus 公有仓库中下载 jar 包:

去到 nexus 仓库中查看仓库内容,如下图所示:

2. 在 pom.xml 文件中配置公有仓库地址(我的项目无效)

pom.xmlrepositories 标签的作用是用来配置 maven 我的项目的近程仓库,示例如下:

    <repositories>
        <repository>
            <!-- 定义仓库 id , 必须惟一,须要 server 中的 id 对应,以便认证 -->
            <id>my-maven</id>
            <!-- 仓库形容 -->
            <name> 自定义公有仓库 </name>
            <!-- 仓库地址 -->
            <url>http://localhost:8081/repository/my-group/</url>
            <!-- 是否能够从这个仓库下载 releases 版本的构件,默认为 true-->
            <releases>
                <enabled>true</enabled>
            </releases>
            <!-- 是否能够从这个仓库下载 snapshots 版本的构件,默认为 true
            禁止从公共仓库下载 snapshot 构件是举荐的做法,因为这些构件不稳固
            -->
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

倡议在 settings.xml 文件中配置公有仓库地址,这样所有我的项目都能够应用那个地址。

3. 公布本地 jar 包到 nexus 仓库

查看自定义的 snapshot 仓库,目前没有相干 jar 包资源,上面如何将本地 jar 包公布到公有仓库。

在 pom.xml 文件中增加如下配置:

    <distributionManagement>
        <repository>
            <!-- 定义仓库 id , 必须惟一,须要 server 中的 id 对应,以便认证 -->
            <id>my-maven</id>
            <!-- 仓库形容 -->
            <name> 自定义发行版仓库 </name>
            <!-- 仓库地址 -->
            <url>http://localhost:8081/repository/my-release/</url>
        </repository>
        <snapshotRepository>
            <!-- 定义仓库 id , 必须惟一,须要 server 中的 id 对应,以便认证 -->
            <id>my-maven</id>
            <!-- 仓库形容 -->
            <name> 自定义快照版仓库 </name>
            <!-- 仓库地址 -->
            <url>http://localhost:8081/repository/my-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

执行如下命令公布我的项目到 nexus 仓库:

mvn clean deploy

构建胜利之后能够查看 nexus 仓库内容如下:

这里有一点值得注意的中央,如何将 jar 包公布到 release 仓库?

其实非常简单,只须要将 <version>1.0.0-SNAPSHOT</version> 中的 1.0.0-SNAPSHOT 改为 1.0.0 即可,当再次执行 mvn clean deploy 则会将 jar 包公布到 release 仓库中了。

还能够间接通过 nexus 控制台上传 jar 包到公有仓库:

退出移动版