Harbor是由VMware公司中國團隊爲企業用戶設計的 Registry server開源項目,包括了權限管理(RBAC)、LDAP、審計、管理界面、自我註冊、HA、RESTful API等企業必需的功能,屬於Cloud Native Computing Foundation(CNCF,雲原生計算基金會)的畢業項目。linux
咱們建議使用2.0之後的版本,Harbor在2.0之後的版本使Harbor成爲第一個符合OCI(Open Container Initiative,開放容器倡議)標準的開源Registry server,可以存儲大量雲原生組件,例如container images、Helm Chart、OPAs、CNAB、Singularity等。 nginx
目前,Harbor最新穩定版本爲2.1,本文使用此版本部署。git
1,咱們的需求以下github
2,如今準備docker環境:docker
# yum install docker-ce -y # yum install docker-compose -y # systemctl start docker
3,Harbor安裝配置:vim
# wget https://github.com/goharbor/harbor/releases/download/v2.0.1/harbor-online-installer-v2.0.1.tgz # tar xf harbor-online-installer-v2.0.1.tgz # cd harbor # vim harbor.yml hostname: registry.myk8s.com #服務的域名 https: # 以下配置域名的證書 certificate: /opt/registry.myk8s.com.crt private_key: /opt/registry.myk8s.com.key external_url: https://registry.myk8s.com # 因爲要用nginx作代理,故須要配置 harbor_admin_password: 123546 # 設置harbor默認admin用戶的密碼 data_volume: /data1 # 設置存儲卷 # bash install.sh
最後install.sh會執行安裝操做,須要從外網下載鏡像,故須要必定的時間。api
4,公網nginx配置給Harbor作代理轉發:bash
# vim registry.myk8s.com.conf server { listen 443; access_log /data0/logs/registry.myk8s.com.log main; server_name registry.myk8s.com; location / { proxy_pass https://x.x.x.x:443; proxy_set_header Host registry.myk8s.com; } }
# systemctl reload nginx
5,訪問Harbor界面和配置服務器
說到使用image就離不開要理解image的tag,咱們先來理解下tag的做用:
1,docker能夠爲image的每個commit ID建立一個tag
docker image將文件等信息的變更抽象爲一次次的commit,每一次commit之後會生成一串無規則的字符串表明這次生成的image的ID,此時,tag的做用就是爲這個ID建立一個友好的NAME,方便咱們對鏡像庫的管理。
2,docker能夠爲給一個本地存在的image建立一個指向遠程registry server的tag
3,一個image能夠有多個tag,不一樣的tag能夠用來區分不一樣的版本架構
# docker login registry.myk8s.com # 輸入用戶名和密碼 # docker tag tutum/dnsutils registry.myk8s.com/test/dnsutils:latest # docker push registry.myk8s.com/test/dnsutils:latest
docker registry也提供鏡像倉庫的功能,可是Harbor功能更爲強大。主要提供了docker registry所沒有的鏡像同步,用戶角色權限控制,Helm Chart倉庫支持等。
Helm是一個開源的k8s包管理器,屬於Cloud Native Computing Foundation(CNCF,雲原生計算基金會)的畢業項目。它可以把建立一個應用所需的全部Kubernetes API對象聲明文件組合並打包在一塊兒,並提供了倉庫的機制便於存儲和分發共享,還支持模版變量替換,同時還有版本的概念,使之可以對一個應用進行版本的管理。
Helm的主要組件以下:
在Helm中,一個Chart可能依賴於任何數量的其餘Chart。這些依賴關係能夠經過requirements.yaml文件動態連接或引入Charts/目錄並手動管理。
helm3在2019年年末發佈,移除了Tiller,支持推送Chart包到Harbor registry server。目前helm最新穩定版爲helm 3.2.4,本位使用此版本部署。
在官方網站https://github.com/helm/helm/releases下載helm3以上的最新穩定二進制版本:
# wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz # tar xf helm-v3.2.4-linux-amd64.tar.gz # mv linux-amd64/helm /usr/local/bin/helm # helm version version.BuildInfo{Version:"v3.2.4", GitCommit:"0ad800ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState:"clean", GoVersion:"go1.13.12"}
helm有本身的官方公開倉庫https://hub.helm.sh/,裏面有開發者貢獻的一些常見應用的Chart。若是有使用開源軟件的需求能夠在上面搜索直接下載使用。固然,也能夠本身搭建Harbor registry server建立公共倉庫。
咱們以在k8s集羣部署cerebro應用爲例子,須要先添加應用對應的repo,而後進行安裝:
# helm repo add stable https://kubernetes-charts.storage.googleapis.com # helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com # helm install stable/cerebro --version 1.1.4 --generate-name # helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION cerebro-1591777586 default 1 2020-07-22 16:26:30.419723417 +0800 CST deployed cerebro-1.1.4 0.8.4 # kubectl get pods|grep cerebro cerebro-1591777586-7fd87f7d48-hmlp7 1/1 Running 0 11m
1,咱們把helm hub的cerebro應用下載到本地,須要再給helm安裝push插件,而後給推送到咱們本身的Harbor registry server上。
# helm repo add stable https://kubernetes-charts.storage.googleapis.com # helm pull stable/cerebro # tar xf cerebro-1.9.2.tgz # yum install git -y # helm plugin install https://github.com/chartmuseum/helm-push.git # export HELM_EXPERIMENTAL_OCI=1 [root@master2 ~]# helm chart save cerebro registry.myk8s.com/test/cerebro:v1.9.2 ref: registry.myk8s.com/test/cerebro:v1.9.2 digest: d32e30e72bb1929b6cf7e46381e7d54f01fc5926c638ef5a47547e0fa24822d5 size: 5.4 KiB name: cerebro version: 1.9.2 v1.9.2: saved # helm registry login https://registry.myk8s.com Username: username Password: Login succeeded # helm chart push registry.myk8s.com/test/cerebro:v1.9.2 The push refers to repository [registry.myk8s.com/test/cerebro] ref: registry.myk8s.com/test/cerebro:v1.9.2 digest: d32e30e72bb1929b6cf7e46381e7d54f01fc5926c638ef5a47547e0fa24822d5 size: 5.4 KiB name: cerebro version: 1.9.2 v1.9.2: pushed to remote (1 layer, 5.4 KiB total)
注意:
若是helm-push安裝失敗,須要經過一些辦法把https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz文件下載到服務器,而後經過以下方法安裝:
# tar xf helm-push_0.8.1_linux_amd64.tar.gz # mkdir -p /root/.local/share/helm/plugins/helm-push.git/bin/ # cp bin/helmpush /root/.local/share/helm/plugins/helm-push.git/bin/
2,咱們本身初始化一個簡單的Chart,默認會安裝一個nginx應用, 而後給推送到Harbor registry server。
# helm create helm-test # vim helm-test/values.yaml # 修改相關Chart的配置 # helm package helm-test # helm install helm-test-0.1.0.tgz --generate-name # 在本地k8s安裝應用 # helm list helm-test-0-1595410957 default 1 2020-07-22 17:42:38.051204463 +0800 CST deployed helm-test-0.1.0 1.16.0 # helm chart save helm-test registry.myk8s.com/test/helm-test:v2 ref: registry.myk8s.com/test/helm-test:v2 digest: 7f1f17b1516d9173b3368cb64393ec31ad8b818b722b743b31276f49c1c36cf9 size: 3.5 KiB name: helm-test version: 0.1.0 v2: saved # helm chart push registry.myk8s.com/test/helm-test:v2 The push refers to repository [registry.myk8s.com/test/helm-test] ref: registry.myk8s.com/test/helm-test:v2 digest: 7f1f17b1516d9173b3368cb64393ec31ad8b818b722b743b31276f49c1c36cf9 size: 3.5 KiB name: helm-test version: 0.1.0 v2: pushed to remote (1 layer, 3.5 KiB total)
Helm Chart只能用於k8s應用程序的包管理,而CNAB應用更爲普遍。Cloud Native Application Bundles (CNAB) 是全新的開源打包格式規範,經過一個可安裝文件就能管理多款,在不一樣環境中配置應用程序資源並分佈式應用,在不一樣環境中配置應用程序資源,無需多個工具集就能輕鬆管理應用程序的生命週期。它兼容Azure,on-prem OpenStack, Kubernetes, Swarm, Ansible, Terraform等平臺。
目前Helm Chart是主流的k8s包管理工具,而Harbor也是主流的registry server,值的咱們研究使用。
https://goharbor.io/docs/2.0.0/install-config/
https://goharbor.io/docs/2.0.0/working-with-projects/working-with-images/managing-helm-charts/
https://goharbor.io/blog/harbor-2.0/
https://helm.sh/docs/intro/install/
https://helm.sh/docs/