1. 程式人生 > 實用技巧 >第六篇 kubernetes helm部署harbor映象倉庫

第六篇 kubernetes helm部署harbor映象倉庫

1.harbor映象倉庫簡介

 Harbor 是為企業使用者設計的容器映象倉庫開源專案,包括了許可權管理(RBAC)、LDAP、審計、安全漏洞掃描、
 映象驗真、管理介面、自我註冊、HA 等企業必需的功能,同時針對中國使用者的特點,設計映象複製和中文支援等功能。

2.harbor 元件簡介

從安裝元件我們可以看出harbor主要依靠以下幾個元件:

Nginx(Proxy):用於代理Harbor的registry,UI, token等服務
db:負責儲存使用者許可權、審計日誌、Dockerimage分組資訊等資料。
UI:提供圖形化介面,幫助使用者管理registry上的映象, 並對使用者進行授權
jobsevice:負責映象複製工作的,他和registry通訊,從一個registry pull映象然後push到另一個registry,並記錄job_log
Adminserver:是系統的配置管理中心附帶檢查儲存用量,ui和jobserver啟動時候回需要載入adminserver的配置。
Registry:原生的docker映象倉庫,負責儲存映象檔案。
Log:為了幫助監控Harbor執行,負責收集其他元件的log,記錄到syslog中

harbor的優勢

1.基於角色控制:使用者與Docker映象倉庫通過"專案"進行組織管理,一個使用者可以對多個映象倉庫在統一名稱空間(projec)裡有不同的許可權
2.圖形化使用者介面:使用者可以通過瀏覽器來瀏覽,檢索當前Docker映象倉庫,管理專案和名稱空間
3.審計管理:所有這怒地映象倉庫的錯都可以被記錄追溯,用於審計管理
4.基於映象的複製策略:映象可以在多個Harbor例項之間進行復制。
5.支援LDAP認證:Harbor的使用者授權可以使用已經存在的使用者。
6.映象刪除和垃圾回收:image可以被刪除並且回收image佔用的空間。
7.簡單的部署功能:harbor提供了online、offline安裝,此外還提供了virtualappliance安裝
8.harbor和docker registry的關係:harbor實質上是對docker registry做了封裝,擴充套件了自己的業務模板。

3.在k8s中使用helm 部署harbor

(1)從github拉取harbor-helm

#cd  /root
#yum install -y git 
#git clone https://github.com/goharbor/harbor-helm
#cd harbor-helm/

(2)修改相關配置

#在harbor-helm資料夾裡面,可以看到Chart.yml 及 values.yaml 等helm 部署相關的檔案,vi 編輯一下value.yaml,根據實際情況修改配置:
ingress:
    hosts:
      core: harbor.k8s.com          #修改ingress裡面的域名
      notary: notary.k8s.com
……
externalURL: https://harbor.k8s.com   #修改訪問的URL
……
#這部分可以看到,這裡需要6個pvc,也就是說需要手動建立6個pv,官方預設為3個5G,3個1G,可根據需要修改size,這裡由於是實驗環境,所以不作改動
  persistentVolumeClaim:
    registry:
      existingClaim: ""
      storageClass: ""
      subPath: ""
      accessMode: ReadWriteOnce
      size: 5Gi
    chartmuseum:
      existingClaim: ""
      storageClass: ""
      subPath: ""
      accessMode: ReadWriteOnce
      size: 5Gi
    jobservice:
      existingClaim: ""
      storageClass: ""
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
    database:
      existingClaim: ""
      storageClass: ""
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
    redis:
      existingClaim: ""
      storageClass: ""
      subPath: ""
      accessMode: ReadWriteOnce
      size: 1Gi
……
harborAdminPassword: "Harbor12345"   #預設管理員密碼為Harbor12345,可在這裡進行修改,建議不要修改

(3)建立需要的5個pv

為簡化實驗,本實驗環境使用local-storage作為持久化儲存,使用k8s3機器的 /data/harbor 目錄作為本地持久化儲存。
在k8s3上面建立五個資料夾:
#mkdir /data/harbor/{data01,data02,data03,data04,data05}
提升資料夾許可權
#chmod -R 777 /data/harbor/

在master上面編寫6個pv的yaml檔案,並建立pv(我只貼出了一個pv.yaml ,剩下的可仿照建立)

apiVersion: v1
kind: PersistentVolume
metadata:
  annotations:
    pv.kubernetes.io/bound-by-controller: "yes"
  finalizers:
  - kubernetes.io/pv-protection
  name: harbor-data01
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  hostPath:
    path: /data/harbor/data01
    type: ""
  persistentVolumeReclaimPolicy: Delete
  volumeMode: Filesystem
status:


#kubectl create -f pv.yaml
#kubectl  get   pv

可以看到5個pv已經準備就緒

(4) 使用helm部署harbor

#kubectl   create ns  harbor
#cd /root/harbor-helm
#helm dependency update
#helm install . --debug -n harbor --namespace harbor

引數說明:
--debug  部署過程中開啟debug模式
-n  定義helm release的名字
--namespace 指定使用哪個namespace部署
分別檢視helm、pvc、deployment、pod、service、ingress 等是否正常(其中部分pod有可能會失敗,但會自動重建,直到最後全部pod都會處理Running狀態)

(5)使用瀏覽器訪問

在master節點,node節點和訪問主機的hosts 檔案中新增對映
192.168.25.65 master.k8s.com   harbor.k8s.com   notary.k8s.com

瀏覽器訪問地址: https://harbor.k8s.com/
輸入使用者名稱: admin     密碼   Harbor12345(這是預設密碼)

注意:我登入時候遇到一個問題是,使用http://harbor.k8s.com  登入會報使用者名稱或密碼錯誤。所以這裡建議使用https 

(6) docker客戶端 訪問

#在Docker Client 的啟動檔案裡面加入 --insecure-registry 引數,強制信任這個映象倉庫。
[root@master ~]# cat /etc/docker/daemon.json
{
 "live-restore": true,
 "insecure-registries" : ["harbor.k8s.com"],
 "registry-mirrors": ["https://q2hy3fzi.mirror.aliyuncs.com"]
}
[root@master ~]#

#重啟 docker 及 daemon
#systemctl daemon-reload  &&  systemctl restart docker 

#docker login  harbor.k8s.com

到此harbor 的部署就完成了,更多的使用才能發現上面的新功能!

官網地址: https://harbor.com/
github地址: https://github.com/goharbor/harbor