docker部署harbor私有鏡像庫(3)

1、harbor介紹

  在實際生產運維中,每每須要把鏡像發佈到幾10、上百臺或更多的節點上。這時單臺Docker主機上鏡像已沒法知足,項目愈來愈多,鏡像就愈來愈多,都放到一臺Docker主機上是不行的,咱們須要一個像Git倉庫同樣系統來統一管理鏡像。這裏介紹的是一個企業級鏡像倉庫Harbor,將做爲咱們容器雲平臺的鏡像倉庫中心。python

  Habor是由VMWare公司開源的容器鏡像倉庫。事實上,Habor是在Docker Registry上進行了相應的企業級擴展,從而得到了更加普遍的應用,這些新的企業級特性包括:管理用戶界面,基於角色的訪問控制 ,AD/LDAP集成以及審計日誌等,足以知足基本企業需求。mysql

2、harbor和registry的比較

  Harbor和Registry都是Docker的鏡像倉庫,可是Harbor做爲更多企業的選擇,是由於相比較於Regisrty來講,它具備不少的優點。nginx

  一、提供分層傳輸機制,優化網絡傳輸
  Docker鏡像是是分層的,而若是每次傳輸都使用全量文件(因此用FTP的方式並不適合),顯然不經濟。必須提供識別分層傳輸的機制,以層的UUID爲標識,肯定傳輸的對象。git

  二、提供WEB界面,優化用戶體驗
  只用鏡像的名字來進行上傳下載顯然很不方便,須要有一個用戶界面能夠支持登錄、搜索功能,包括區分公有、私有鏡像。github

  三、支持水平擴展集羣
  當有用戶對鏡像的上傳下載操做集中在某服務器,須要對相應的訪問壓力做分解。web

  四、良好的安全機制
  企業中的開發團隊有不少不一樣的職位,對於不一樣的職位人員,分配不一樣的權限,具備更好的安全性。sql

  五、Harbor提供了基於角色的訪問控制機制,並經過項目來對鏡像進行組織和訪問權限的控制。kubernetes中經過namespace來對資源進行隔離,在企業級應用場景中,經過將二者進行結合能夠有效將kubernetes使用的鏡像資源進行管理和訪問控制,加強鏡像使用的安全性。尤爲是在多租戶場景下,能夠經過租戶、namespace和項目相結合的方式來實現對多租戶鏡像資源的管理和訪問控制。docker

3、部署harbor(在部署節點上)

  harbor須要安裝docker和docker-compose,client只須要安裝dockerjson

  docker-compose的安裝:vim

yum install epel-release
yum install -y python-pip
pip install --upgrade pip
pip install docker-compose

一、下載harbor

  https://github.com/goharbor/harbor/releases

二、解壓至/opt下

[root@ren8 kubernetes]# tar zxf harbor-offline-installer-v1.4.0.tgz
[root@ren8 kubernetes]# ls
bash                                 k8s197.tar.gz
ca.tar.gz                            kube-yunwei-197
harbor                               kube-yunwei-197.tar.gz
harbor-offline-installer-v1.4.0.tgz  scope.yaml
image                                sock-shop
image.tar.gz
[root@ren8 kubernetes]# cp -r harbor /opt/
[root@ren8 kubernetes]# cd /opt/harbor/
[root@ren8 harbor]# ls -trl
總用量 805152
-rwxr-xr-x 1 root root     25791 2月   6 2018 prepare
-rw-r--r-- 1 root root       482 2月   6 2018 NOTICE
-rw-r--r-- 1 root root     10771 2月   6 2018 LICENSE
-rwxr-xr-x 1 root root      5773 2月   6 2018 install.sh
drwxr-xr-x 3 root root       156 2月   6 2018 ha
-rw-r--r-- 1 root root 824398580 2月   6 2018 harbor.v1.4.0.tar.gz
-rw-r--r-- 1 root root      1140 10月 23 15:11 docker-compose.clair.yml
-rw-r--r-- 1 root root      1732 10月 23 15:12 docker-compose.notary.yml
-rw-r--r-- 1 root root      3396 10月 23 15:13 docker-compose.yml
drwxr-xr-x 4 root root        37 10月 23 15:17 common
-rw-r--r-- 1 root root      5968 10月 24 15:57 harbor.cfg

三、修改配置文件

(1)建立harbor工做目錄,並準備ca證書,移動到harbor工做目錄下

[root@ren8 ~]# ls
anaconda-ks.cfg  cert.tar.gz  k8saddons.tar.gz   original-ks.cfg
bin              docker       kubernetes         token.sh
bin.tar.gz       k8saddons    kubernetes.tar.gz  yum-repo.sh
[root@ren8 ~]# tar xf cert.tar.gz 
[root@ren8 ~]# mkdir -p /data/harbor
[root@ren8 ~]# cp -r cert /data/harbor
[root@ren8 ~]# cd /data/harbor/cert/
[root@ren8 cert]# ls -trl
總用量 24
-rw-r--r-- 1 root root 3272 9月  28 17:43 ca.key
-rw-r--r-- 1 root root 2130 9月  28 17:43 ca.crt
-rw-r--r-- 1 root root 3272 9月  28 17:49 harbor.key
-rw-r--r-- 1 root root 1756 9月  28 17:49 harbor.csr
-rw-r--r-- 1 root root 2013 9月  28 17:49 harbor.crt
-rw-r--r-- 1 root root   17 9月  28 17:49 ca.srl

(2)修改harbor主配置文件harbor.cfg

[root@ren8 cert]# cd /opt/harbor/
[root@ren8 harbor]# ls
common                     ha                    LICENSE
docker-compose.clair.yml   harbor.cfg            NOTICE
docker-compose.notary.yml  harbor.v1.4.0.tar.gz  prepare
docker-compose.yml         install.sh

[root@ren8 harbor]# vim harbor.cfg
###################修改以下參數##################### hostname = reg.yunwei.com ui_url_protocol = https ssl_cert = /data/harbor/cert/harbor.crt     #ca證書名稱必須與實踐文件同名  ssl_cert_key = /data/harbor/cert/harbor.key   # secretkey_path = /data/harbor           #ca證書的目錄
harbor_admin_password = admin

(3)修改 docker-compose.clair.yml 編排文件

/data/harbor/clair-db:/var/lib/postgresql/data:z

(4)修改 docker-compose.notary.yml 編排文件

/data/harbor/notary-db:/var/lib/mysql:z

(5)修改 docker-compose.yml 編排文件

/data/harbor/:/var/log/docker/:z
/data/harbor/registry:/storage:z
/data/harbor/database:/var/lib/mysql:z
/data/harbor/config/:/etc/adminserver/config/:z
/data/harbor/secretkey:/etc/adminserver/key:z
/data/harbor/:/data/:z
/data/harbor/secretkey:/etc/ui/key:z
/data/harbor/ca_download/:/etc/ui/ca/:z
/data/harbor/psc/:/etc/ui/token/:z
/data/harbor/job_logs:/var/log/jobs:z
/data/harbor/secretkey:/etc/jobservice/key:z

四、安裝、啓動harbor

  執行./install.sh(sh install.sh)腳本便可。

[root@ren8 harbor]# ls
common                     ha                    LICENSE
docker-compose.clair.yml   harbor.cfg            NOTICE
docker-compose.notary.yml  harbor.v1.4.0.tar.gz  prepare
docker-compose.yml         install.sh
[root@ren8 harbor]# sh install.sh 

  驗證harbor是否部署成功(必須在/opt/harbor/目錄下執行)

[root@ren8 harbor]# docker-compose ps
       Name                Command          State          Ports        
------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh Up                          
harbor-db            /usr/local/bin         Up      3306/tcp            
                     /docker-entr ...                                   
harbor-jobservice    /harbor/start.sh Up                          
harbor-log           /bin/sh -c             Up      127.0.0.1:1514->1051
                     /usr/local/bin/ ...            4/tcp               
harbor-ui            /harbor/start.sh Up                          
nginx                nginx -g daemon off;   Up      0.0.0.0:443->443/tcp
                                                    , 0.0.0.0:4443->4443
                                                    /tcp,               
                                                    0.0.0.0:80->80/tcp  
registry             /entrypoint.sh serve   Up      5000/tcp            
                     /etc/ ...                                          

五、各節點設置登陸harbor私有鏡像倉庫(爲各節點分發ca證書)

(1)在每一個節點(包括harbor節點)的/etc/docker/目錄下,建立certs.d/reg.yunwei.com/目錄

[root@ren8 ~]# mkdir -p /etc/docker/certs.d/reg.yunwei.com/

(2)harbor節點上,將harbor的ca證書中的ca.crt拷貝到/etc/docker目錄下

[root@ren8 ~]# cp /data/harbor/cert/ca.crt /etc/docker/certs.d/reg.yunwei.com/

(3)將harbor節點的ca.crt文件,分發給各節點的/etc/docker/certs.d/reg.yunwei.com/下

[root@ren8 ~]# scp /etc/docker/certs.d/reg.yunwei.com/ca.crt ren7:/etc/d
ocker/certs.d/reg.yunwei.com/
[root@ren8 ~]# scp /etc/docker/certs.d/reg.yunwei.com/ca.crt ren6:/etc/d
ocker/certs.d/reg.yunwei.com/
[root@ren8 ~]# scp /etc/docker/certs.d/reg.yunwei.com/ca.crt ren5:/etc/d
ocker/certs.d/reg.yunwei.com/

(4)harbor鏡像庫登陸驗證

  1)命令行:各節點登錄鏡像庫地址後,輸入用戶名/密碼(admin/admin)後出現 Login Succeeded

[root@ren7 ~]# docker login reg.yunwei.com
Username: admin
Password: 
Login Succeeded
   2)web瀏覽器:瀏覽器輸入harbor節點ip

  若是登陸不上,能夠修改配置文件 /etc/docker/daemon.json

[root@ren8 ~]# cat /etc/docker/daemon.json 
{
 "registry-mirrors": ["http://cc83932c.m.daocloud.io"],
 "insecure-registries": ["192.168.11.7:5000"],
 "insecure-registries": ["192.168.11.8"],    #添加harbor節點的ip的安全認證
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    }
}
    
[root@ren8 ~]# systemctl daemon-reload
[root@ren8 ~]# systemctl restart docker

4、上傳鏡像到harbor私有鏡像倉庫

一、本地鏡像從新打tag

docker tag SOURCE_IMAGE[:TAG] reg.yunwei.com/learn/IMAGE[:TAG]

二、將從新打好tag的鏡像上傳到鏡像庫

  若是在推送鏡像時,被拒絕(denied: requested access to the resource is denied),是由於沒有docker login 登錄harbor鏡像庫。

docker push reg.yunwei.com/learn/IMAGE[:TAG]

三、其它節點配置好了ca證書的ca.crt文件後,即可執行以下命令下載鏡像。在kubernetes集羣中節點中啓動pod時,會自動下載鏡像

docker pull reg.yunwei.com/learn/busybox:latest

5、harbor啓動和中止

  進入到harbor目錄下,擁有docker-compose.yml的文件目錄下執行以下的命令啓動和關閉:

[root@ren8 harbor]# docker-compose start
[root@ren8 harbor]# docker-compose restart
[root@ren8 harbor]# docker-compose stop
[root@ren8 harbor]# docker-compose rm

6、harbor各組件介紹

  默認狀況下,harbor運行起來後有以下容器:

[root@ren8 harbor]# docker ps
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS                 PORTS                                                              NAMES
d82eb9967cc3        vmware/harbor-jobservice:v1.4.0        "/harbor/start.sh"       46 hours ago        Up 2 hours (healthy)                                                                      harbor-jobservice
5e8849eaf757        vmware/nginx-photon:v1.4.0             "nginx -g 'daemon of…"   46 hours ago        Up 2 hours             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp   nginx
6e4a776103b5        vmware/harbor-ui:v1.4.0                "/harbor/start.sh"       46 hours ago        Up 2 hours (healthy)                                                                      harbor-ui
eff0c2c84df6        vmware/harbor-adminserver:v1.4.0       "/harbor/start.sh"       46 hours ago        Up 2 hours (healthy)                                                                      harbor-adminserver
ca862377182c        vmware/registry-photon:v2.6.2-v1.4.0   "/entrypoint.sh serv…"   46 hours ago        Up 2 hours (healthy)   5000/tcp                                                           registry
f37bb2d03d39        vmware/harbor-db:v1.4.0                "/usr/local/bin/dock…"   46 hours ago        Up 2 hours (healthy)   3306/tcp                                                           harbor-db
d9f6ccc5d821        vmware/harbor-log:v1.4.0               "/bin/sh -c /usr/loc…"   46 hours ago        Up 2 hours (healthy)   127.0.0.1:1514->10514/tcp                                          harbor-log

  分別爲nginx,harbor-jobservice,harbor-ui,harbor-adminserver,registry,harbor-db,harbor-log,由上咱們能夠得出下面的架構圖:

 

  Harbor是經過docker compose來部署的,這也是爲何在裝Harbor以前,須要安裝docker-compose。各個模塊的詳細介紹以下:

  一、Proxy:對應啓動組件nginx,是一個nginx反向代理,Harbor的registry,UI,token services等組件,都處在一個反向代理後邊,該代理負責未來自瀏覽器,docker clients的請求轉發到後端服務上

  二、Registry:對應啓動組件registry.負責存儲Docker鏡像文件,以及處理Docker的push,pull等請求.Harbor對鏡像進行強制的訪問控制,Registry會將客戶端的每一個pull,push請求轉發到token服務來獲取有效的token.

  三、Core services:Harbor的核心功能,主要包括3個服務:UI,Job services和Log collector.

  (1)UI:對應啓動組件harbor-ui.以圖像用戶界面的方式,輔助用戶管理鏡像,我我的以爲這樣使得使用Harbor時,更加友好.

  (2)Job services:對應啓動組件harbor-jobservice,主要用於鏡像複製,和registry通訊,本地鏡像能夠push到Harbor鏡像倉庫中,一樣也能夠從Harbor鏡像倉庫中pull到本地,同時記錄job_log.

  (3)Log collector:對應啓動組件harbor-log.負責收集其餘模塊的日誌到一個地方

  四、Database:對應啓動組件harbor-db.負責存儲project,user,role,replication等的metadata數據.

  五、adminserver:對應啓動組件harbor-adminserver.是系統的配置管理中心,當ui和jobserver啓動時,須要加載adminserver的配置

相關文章
相關標籤/搜索