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做以下配置下:


