安裝 Harbor
Harbor 支持多種安裝方式,源碼目錄下面默認有一個安裝腳本(make/install.sh),采用 docker-compose 的形式運行 Harbor 各個組件,和前面的課程一樣,我們這里依然還是將 Harbor 安裝到 Kubernetes 集群中,如果我們對 Harbor 的各個組件之間的運行關系非常熟悉,同樣的,我們可以自己手動編寫資源清單文件進行部署,不過 Harbor 源碼目錄中也為我們提供了生成這些資源清單的腳本文件了(make/kubernetes/k8s-prepare),我們只需要執行下面的命令即可為我們生成所需要用到的 YAML 文件了:
$ python make/kubernetes/k8s-prepare
當然了如果上面的一些基本配置不能滿足你的需求,你也可以做一些更高級的配置。你可以在make/common/templates目錄下面找到所有的 Harbor 的配置模板,做相應的修改即可。
不過我們這里給大家介紹另外一種簡單的安裝方法:Helm,Harbor 官方提供了對應的 Helm Chart 包,所以我們可以很容易安裝。
首先下載 Harbor Chart 包到要安裝的集群上:
$ git clone https://github.com/goharbor/harbor-helm
切換到我們需要安裝的分支,比如我們這里使用 1.0.0分支:
$ cd harbor-helm $ git checkout 1.0.0
安裝 Helm Chart 包最重要的當然是values.yaml文件了,我們可以通過覆蓋該文件中的屬性來改變配置:
expose: # 設置暴露服務的方式。將類型設置為 ingress、clusterIP或nodePort並補充對應部分的信息。 type: ingress tls: # 是否開啟 tls,注意:如果類型是 ingress 並且tls被禁用,則在pull/push鏡像時,則必須包含端口。詳細查看文檔:https://github.com/goharbor/harbor/issues/5291。 enabled: true # 如果你想使用自己的 TLS 證書和私鑰,請填寫這個 secret 的名稱,這個 secret 必須包含名為 tls.crt 和 tls.key 的證書和私鑰文件,如果沒有設置則會自動生成證書和私鑰文件。 secretName: "" # 默認 Notary 服務會使用上面相同的證書和私鑰文件,如果你想用一個獨立的則填充下面的字段,注意只有類型是 ingress 的時候才需要。 notarySecretName: "" # common name 是用於生成證書的,當類型是 clusterIP 或者 nodePort 並且 secretName 為空的時候才需要 commonName: "" ingress: hosts: core: core.harbor.domain notary: notary.harbor.domain annotations: ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/ssl-redirect: "true" ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-body-size: "0" clusterIP: # ClusterIP 服務的名稱 name: harbor ports: httpPort: 80 httpsPort: 443 # Notary 服務監聽端口,只有當 notary.enabled 設置為 true 的時候有效 notaryPort: 4443 nodePort: # NodePort 服務名稱 name: harbor ports: http: port: 80 nodePort: 30002 https: port: 443 nodePort: 30003 notary: port: 4443 nodePort: 30004 # Harbor 核心服務外部訪問 URL。主要用於: # 1) 補全 portal 頁面上面顯示的 docker/helm 命令 # 2) 補全返回給 docker/notary 客戶端的 token 服務 URL # 格式:protocol://domain[:port]。 # 1) 如果 expose.type=ingress,"domain"的值就是 expose.ingress.hosts.core 的值 # 2) 如果 expose.type=clusterIP,"domain"的值就是 expose.clusterIP.name 的值 # 3) 如果 expose.type=nodePort,"domain"的值就是 k8s 節點的 IP 地址 # 如果在代理后面部署 Harbor,請將其設置為代理的 URL externalURL: https://core.harbor.domain # 默認情況下開啟數據持久化,在k8s集群中需要動態的掛載卷默認需要一個StorageClass對象。 # 如果你有已經存在可以使用的持久卷,需要在"storageClass"中指定你的 storageClass 或者設置 "existingClaim"。 # # 對於存儲 docker 鏡像和 Helm charts 包,你也可以用 "azure"、"gcs"、"s3"、"swift" 或者 "oss",直接在 "imageChartStorage" 區域設置即可 persistence: enabled: true # 設置成"keep"避免在執行 helm 刪除操作期間移除 PVC,留空則在 chart 被刪除后刪除 PVC resourcePolicy: "keep" persistentVolumeClaim: registry: # 使用一個存在的 PVC(必須在綁定前先手動創建) existingClaim: "" # 指定"storageClass",或者使用默認的 StorageClass 對象,設置成"-"禁用動態分配掛載卷 storageClass: "" subPath: "" accessMode: ReadWriteOnce size: 5Gi chartmuseum: existingClaim: "" storageClass: "" subPath: "" accessMode: ReadWriteOnce size: 5Gi jobservice: existingClaim: "" storageClass: "" subPath: "" accessMode: ReadWriteOnce size