kubernetes搭建Harbor無坑及Harbor倉庫同步

1、helm搭建harbor

1.安裝helm

1.1.安裝helm客戶端

tar -zxvf helm-v2.14.3-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/

chmod +x /usr/local/bin/helm

helm version

1.2.安裝helm tiller(server)端

1.2.1.爲應用程序設置serviceaccount

kubectl create -f helm-rbac-config.yaml
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

1.2.2.安裝tiller

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url [https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts](https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)

1.2.3.卸載Helm鏡像等k8s資源

kubectl get -n kube-system secrets,sa,clusterrolebinding -o name|grep tiller|xargs kubectl -n kube-system delete kubectl get all -n kube-system -l app=helm -o name|xargs kubectl delete -n kube-system

2. 安裝Harbor

下載 harbor-helmlinux

git clone https://github.com/goharbor/harbor-helm.git
cd XXX/harbor-helm

2.1.設置value.yml

更改掛載卷,爲nfsgit

sed -i 's/storageClass: ""/storageClass: "nfs"/g' values.yaml

更改掛載卷大小/sizegithub

persistence:
  enabled: true
  # Setting it to "keep" to avoid removing PVCs during a helm delete
  # operation. Leaving it empty will delete PVCs after the chart deleted
  resourcePolicy: "keep"
  persistentVolumeClaim:
    registry:
      # Use the existing PVC which must be created manually before bound,
      # and specify the "subPath" if the PVC is shared with other components
      existingClaim: ""
      # Specify the "storageClass" used to provision the volume. Or the default
      # StorageClass will be used(the default).
      # Set it to "-" to disable dynamic provisioning
      storageClass: "nfs"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 5Gi
    chartmuseum:
      existingClaim: ""
      storageClass: "nfs"
      subPath: ""
      accessMode: ReadWriteOnce
      size: 5Gi

更改Harbor暴露方式和域名docker

ingress:
    hosts:
      core: core.harbor.domain
      notary: notary.harbor.domain
externalURL: https://core.harbor.domain

更改Harbor密碼json

harborAdminPassword: "Harbor12345"

若爲非存儲卷,建立pvapi

for i in {1..5}; do

cat <<EOF | kubectl apply -f -

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv00${i}

spec:

capacity:

storage: 50Gi

accessModes:

- ReadWriteOnce #須要注意

persistentVolumeReclaimPolicy: Recycle

nfs:

path: /volume1/harbor/nfs${i}

server: 10.8.4.133

EOF

done

2.2.安裝harbor並將日誌寫入文件,可編輯文件保留.yaml編排文件,以便之後使用

helm install . --debug --name hub |sed 'w harbor.yaml'

2.3.卸載Harbor

helm del hub --purge

kubectl get pod,pv,pvc -o name|grep hub |xargs kubectl delete

2.4.若Pod未啓動成功

2.4.1.查看hub-harbor-database-0 日誌

kubectl logs -f hub-harbor-database-0

服務器

kubectl logs hub-harbor-database-0 -p

harbor-db日誌

若Pod啓動失敗,報找不到以上database的錯誤,是有db還未啓動成功,在Pod探針失敗的狀況下強制重啓了Pod,致使3個Database腳本沒有執行完畢,因此加長探針開始掃描時間和超時時間。(這個問題遇到的的確很坑)app

kubectl delete statefulset hub-harbor-database

更改harbor.yaml中圖片部分hub-harbor-database的編排文件的initialDelaySeconds、periodSeconds兩個屬性
harbor.yaml編配文件dom

kubectl applay -f harbor.yaml

等待Pod所有啓動完成如圖測試

Pod

2.5.Harbor訪問及使用

查看ingress

kubectl get ingress

如圖配置域名
ingress
hosts

訪問https://core.harbor.agree ,如圖所示

Harbor

3.配置docker訪問密匙

kubectl get secrets/hub-harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 --decode

如圖
image.png

`mkdir /etc/docker/certs.d/core.harbor.agree -p`
kubectl get secrets/hub-harbor-ingress -o jsonpath="{.data.ca\.crt}" | base64 --decode|sed 'w /etc/docker/certs.d/core.harbor.agree/ca.crt'
docker login core.harbor.agree

初次登錄 用戶名爲admin 密碼默認爲Harbor12345
docker login

建立項目如圖
harbor

`docker push core.harbor.agree/dev/busybox:1.27`

至此Harbor安裝完成。

4.配置Harbor同步管理

其餘區域服務器同上部署Harbor倉庫

倉庫管理-新建目標,如圖,此時目標URL不可訪問,請增長以下配置
harbor

執行

`kubectl edit cm coredns -n kube-system`

kubectl edit cm coredns

如圖增長:

hosts {

          10.8.4.131 core.harbor.agree

          fallthrough

        }

hosts與/etc/hosts配置的ingress一致。

測試鏈接,如圖,點擊肯定
harbor

選擇同步管理-新建規則,如圖:
harbor

規則:

一、從目標服務器拉取鏡像/推送鏡像

二、同步以名稱、tag、資源過濾後的鏡像

三、選擇目標服務器

四、選擇目標服務器Harbor的Namespace

五、選擇觸發模式:

l 手動觸發

l 定時:

從一日開始,每個月執行一次:0 0 0 0 1/1 ?

          本月最後一天執行:0 0 0 L ? ?

          每週週六凌晨執行:0 0 0 0 0 6 *

定時爲Cron表達式,可在http://cron.qqe2.com/線生成

確認後,生產規則

選擇規則,點擊同步,如圖:
harbor

若是失敗,請進入同步任務,查看具體日誌。
harbor
harbor

5.Harbor鏡像刪除及GC回收

5.1. Harbor鏡像刪除

項目-鏡像倉庫,點擊鏡像,選擇鏡像標籤,點擊刪除-確認
harbor

5.2.Harbor GC回收

** 鏡像標籤刪除後,鏡像文件仍然保存在Harbor中,須要經過垃圾回收進行完全刪除鏡像。**
操做步驟
任務-垃圾清理
harbor
當即清理垃圾,或者定時清理垃圾。

因爲完整的k8s搭建Harbor資料不多,做者也入了很多坑,如若本篇文章對你們有所幫助,但願留下您的喜歡

相關文章
相關標籤/搜索