美文网首页
Kubernetes部署Nexus3后配置Docker私有仓库

Kubernetes部署Nexus3后配置Docker私有仓库

作者: 柠檬信息技术有限公司 | 来源:发表于2018-12-08 17:29 被阅读71次

    上一篇文章(https://www.jianshu.com/p/cc4817e014df)中,我们成功使用Kubernetes搭建了Nexus3,但是如果使用Nexus3中的docker私有仓库功能,我们还需要额外做一些操作,今天我们就来完善它

    0x01. 创建Docker私有仓库

    我们打开上一次我们部署好的Nexus3,以管理员身份登录之后进入仓库管理页面


    k8s-nexus-docker01.png

    点开创建仓库页面后,我们在创库种类列表中选择docker(hosted),三种类型分别表示如下:

    • docker(proxy):对其他仓库进行代理,比如docker中央仓库
    • docker(hosted):本地存储docker镜像数据,即搭建一个和docker官方仓库一样的可以存储docker镜像的私服
    • docker(group):聚合仓库,其实就是通过配置将多个docker仓库引用合并成一个仓库对外开放


      k8s-nexus-docker02.png

    在仓库信息配置页面中,请填写仓库名称,勾选HTTP并填写HTTP监听端口号、勾选对docker V1 API的支持,我这里填写的是8082端口号,实际中读者可以根据自己服务器的实际情况进行填写,一定要记住这里填写的端口号,我们稍后会用到。至于docker v1 的支持根据自己的需要,如果自己的docker客户端肯定是V2版本那么可以不勾选。


    k8s-nexus-docker03.png

    本页面的其他选项默认可以不进行修改,直接点击创建仓库【Create repository】按钮即可


    k8s-nexus-docker04.png

    0x02. 修改kubernetes的配置文件

    修改后的配置文件(repo-nexus.yaml)内容如下:

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      labels:
        app: repo-nexus
      name: repo-nexus
      namespace: repo-nexus
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: repo-nexus
      template:
        metadata:
          labels:
            app: repo-nexus
        spec:
          containers:
            - name: repo-nexus
              image: registry.docker-cn.com/sonatype/nexus3:latest
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 8081
                protocol: TCP
              - containerPort: 8082
                protocol: TCP
              volumeMounts:
              - name: repo-nexus-data
                mountPath: /nexus-data
          volumes:
            - name: repo-nexus-data
              persistentVolumeClaim:
                claimName: repo-nexus-pvc
    
    ---
    # service
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        app: repo-nexus
      name: repo-nexus
      namespace: repo-nexus
    spec:
      ports:
        - port: 8081
          targetPort: 8081
          name: repo-base
        - port: 8082
          targetPort: 8082
          name: repo-docker
      selector:
        app: repo-nexus
    
    ---
    # ingress
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: repo-nexus
      namespace: repo-nexus
    spec:
      rules:
      - host: repo.lemonit.cn
        http:
          paths:
          - path: /
            backend:
              serviceName: repo-nexus
              servicePort: 8081
      - host: docker.repo.lemonit.cn
        http:
          paths:
          - path: /
            backend:
              serviceName: repo-nexus
              servicePort: 8082
    

    本配置文件共做了如下修改:

    • Deployment中spec/template/spec/containers/ports字段增加了一组元素,配置containerPort为8082,这里的端口号对应刚才我们在创建仓库的页面中填写的HTTP监听的端口号,注意!!!一定要匹配!!!
    • Service中的spec/ports字段增加了一组元素,设置对外端口号port和容器targetPort,因为出现了多组端口,还需要为每组端口号增加name属性,否则应用配置的时候kubernetes会报错service invalid。这里为了方便记忆,把对外端口号port和容器端口号targetPort设置成了一样的8082
    • Ingress中spec/rules字段增加一组元素,配置一个新的监听,监听域名docker.repo.lemonit.cn,后端的serviceName同样为repo-nexus,端口号为刚刚service port:8082
      这三项修改完毕后,我们使用命令对配置进行生效操作:
    kubectl apply -f repo-nexus.yaml
    

    0x03. 后续配置

    这一步主要是kubernetes之外的外部操作,根据自己的情况进行操作,主要分以下两步:

    1. 申请docker.repo.lemonit.cn域名和对应的SSL证书,建议配置SSL证书,否则Docker访问http的仓库的时候还需要进行配置操作。腾讯云可以免费申请SSL证书。
    2. 在外部的负载均衡中配置docker.repo.lemonit.cn的SSL证书,并将其代理转发到kubernetes中的ingress外部节点上

    我的负载均衡因为配置到了8445端口号上,所以最后得到的完整地址为

    docker.repo.lemonit.cn:8445
    

    0x04. 测试

    接下来,我们将从docker hub中pull下来的busybox镜像推送到我们的私有仓库进行测试,首先在装有docker的机器上从docker hub中pull镜像

    docker pull busybox:latest
    

    然后对pull下来的镜像进行tag标记

    docker tag busybox:latest docker.repo.lemonit.cn:8445/busybox:latest
    

    推送之前,我们还需要登录到docker仓库

    docker login docker.repo.lemonit.cn:8445
    

    执行命令之后会提示分别输入username和password,这里可以使用nexus的默认admin账号密码进行登录,也可以在Nexus3中单独建立一个只有docker仓库权限的账号进行登录,提示Login Succeeded说明登录成功。
    接下来,我们将这个镜像推到私有仓库中

    docker push docker.repo.lemonit.cn:8445/busybox:latest
    

    控制台输出如下,推送成功

    LemonITCNdeMacBook-Pro: ~ $ docker push docker.repo.lemonit.cn:8445/busybox:latest
    The push refers to repository [docker.repo.lemonit.cn:8445/busybox]
    8a788232037e: Pushed 
    latest: digest: sha256:915f390a8912e16d4beb8689720a17348f3f6d1a7b659697df850ab625ea29d5 size: 527
    

    在客户端推送完毕后,我们去Nexus中可以查看到我们刚刚成功推送的busybox镜像


    k8s-nexus-docker05.png

    有不懂的朋友欢迎评论问我,或者加我微信,微信号: qbxx002

    相关文章

      网友评论

          本文标题:Kubernetes部署Nexus3后配置Docker私有仓库

          本文链接:https://www.haomeiwen.com/subject/vlbqhqtx.html