kubernetes集群:nexus搭建docker私有倉庫及使用


 k8s集群已經搭建好。包括nginx-ingress也已經做好,nfs掛載已經做好。具體請見筆記:https://www.cnblogs.com/zoujiaojiao/p/12515917.html

環境說明:

下面看k8s集群中,搭建Nexus:

1. 創建yaml文件目錄:

#mkdir /opt/nexus

2. 創建命名空間

vim repo-nexus-ns.yaml

apiVersion: v1
kind: Namespace
metadata:
   name: repo-nexus
   labels:
     name: repo-nexus

啟用:kubectl apply -f repo-nexus-ns.yaml

3. 創建PV和PVC

cat >repo-nexus-data.yaml <<EOF
---
# pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: repo-nexus-pv
spec:
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteMany
  nfs:
       server: 10.10.4.85
       path: "/data/repo-nexus"

---
# pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: repo-nexus-pvc
  namespace: repo-nexus
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 50Gi
EOF

在nfs服務器10.10.4.85上創建目錄:# mkdir /data/repo-nexus/

啟用:kubectl create -f repo-nexus-data.yaml

4.部署nexus。下面的文件是解決了所有問題后的最終版配置。

cat >repo-nexus.yaml <<EOF
---
# deployment

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: sonatype/nexus3:latest
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: "4Gi"
              cpu: "1000m"
            requests:
              memory: "2Gi"
              cpu: "500m"
          ports:
          - containerPort: 8081   #作為nexus服務端口
            protocol: TCP
          - containerPort: 6000   #作為docker私庫的端口
            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: 6000
      targetPort: 6000
      name: repo-docker
  selector:
    app: repo-nexus

---
# ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "1024m"    #后面有做解釋,上傳文件大小限制,是遇到問題后添加的
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    kubernetes.io/tls-acme: 'true'
  name: repo-nexus
  namespace: repo-nexus
spec:
  rules:
  - host: nexus.vonedao.com   #nexus私庫
    http:
      paths:
      - path: /
        backend:
          serviceName: repo-nexus
          servicePort: 8081
  - host: docker.vonedao.com   #docker私庫
    http:
      paths:
      - path: /
        backend:
          serviceName: repo-nexus
          servicePort: 6000
EOF

部署應用:kubectl apply -f repo-nexus.yaml

查看:

kubectl get svc,pod,ingress -n repo-nexus -o wide

 

 

訪問:

由於是私網搭建,域名都是非正式的,需要在win機器hosts里指定ingress地址到該域名:

 

 

訪問,第一次訪問會要求你填入賬戶admin和密碼,密碼會在你掛載的文件中/data/repo-nexus/admin.password中。初次登錄后,需要修改密碼。

在nexus上創建docker倉庫:

1. 添加Blob stores

 

 

 

 添加Repositories:

 

 

 

 

 

 

 查看倉庫:

 暫時為空的倉庫:

給docker配置私庫后,重啟docker,然后登錄:

# cat /etc/docker/daemon.json 
{"registry-mirrors": ["http://295c6a59.m.daocloud.io"],"insecure-registries":["http://docker.vonedao.com"]}
# systemctl restart docker

輸入admin 賬戶,和你修改過的密碼。

 

 

上傳文件的大小超出了 Nginx 允許的最大值,如果沒有配置的話,默認是1M;

修改repo-nexus.yaml:

# ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 annotations: nginx.ingress.kubernetes.io/proxy-body-size: "1024m" nginx.ingress.kubernetes.io/proxy-read-timeout: "600" nginx.ingress.kubernetes.io/proxy-send-timeout: "600" kubernetes.io/tls-acme: 'true'
  name: repo-nexus
  namespace: repo-nexus

添加了下面幾個配置:

  annotations:
#客戶端上傳文件,最大大小 nginx.ingress.kubernetes.io/proxy-body-size: "1024m"
#后端服務器響應超時時間 nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
#后端服務器回轉數據超時時間
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
更新nexus:
# kubectl apply -f repo-nexus.yaml 


重新上傳:
# docker tag b2428543fab0 docker.vonedao.com/bases/jenkins:lts
# docker push docker.vonedao.com/bases/jenkins:lts

 登錄服務器檢查:

 

 其他服務器配置倉庫,重啟docker:

 

使用Maven插件快捷打包發布遠程Docker鏡像

在使用使用Maven 插件docker-maven-plugin 打包推送鏡像的時候報錯:

Failed to execute goal io.fabric8:docker-maven-plugin:0.32.0:build 
(default-cli) on project vonedao-auth: Unable to pull
'java:8-jre' from registry 'docker.vonedao.com' :
{"message":"Get http://docker.vonedao.com/v2/java/manifests/8-jre: no basic auth credentials"}
(Internal Server Error: 500) ->

由於我們使用的是nexus,nexus做以下配置下:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM