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