日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一:部署harbor镜像仓库

發(fā)布時間:2024/3/13 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一:部署harbor镜像仓库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Docker容器應(yīng)用的開發(fā)和運行離不開可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署我們私有環(huán)境內(nèi)的Registry
也是非常必要的。之前介紹了Docker私有倉庫Registry,這里介紹另一款企業(yè)級Docker鏡像倉庫Harbor的部署和使用,在Kubernetes集群中,推薦使用Harbor倉庫環(huán)境。

一、Harbor倉庫介紹

我們在日常Docker容器使用和管理過程中,漸漸發(fā)現(xiàn)部署企業(yè)私有倉庫往往是很有必要的, 它可以幫助你管理企業(yè)的一些敏感鏡像, 同時由于Docker Hub的下載速度和GFW的原因, 往往需要將一些無法直接下載的鏡像導(dǎo)入本地私有倉庫. 而Harbor就是部署企業(yè)私有倉庫的一個不二之選。Harbor是由VMware公司開源的企業(yè)級的Docker Registry管理項目,Harbor主要提供Dcoker Registry管理UI,提供的功能包括:基于角色訪問的控制權(quán)限管理(RBAC)、AD/LDAP集成、日志審核、管理界面、自我注冊、鏡像復(fù)制和中文支持等。Harbor的目標(biāo)是幫助用戶迅速搭建一個企業(yè)級的Docker registry服務(wù)。它以Docker公司開源的registry為基礎(chǔ),額外提供了如下功能:

  • -> 基于角色的訪問控制(Role Based Access Control)

  • -> 基于策略的鏡像復(fù)制(Policy based image replication)

  • -> 鏡像的漏洞掃描(Vulnerability Scanning)

  • -> AD/LDAP集成(LDAP/AD support)

  • -> 鏡像的刪除和空間清理(Image deletion & garbage collection)

  • -> 友好的管理UI(Graphical user portal)

  • -> 審計日志(Audit logging)

  • -> RESTful API

  • -> 部署簡單(Easy deployment)

Harbor的所有組件都在Dcoker中部署,所以Harbor可使用Docker Compose快速部署。需要特別注意:由于Harbor是基于Docker Registry V2版本,所以docker必須大于等于1.10.0版本,docker-compose必須要大于1.6.0版本!

二、Harbor倉庫結(jié)構(gòu)

Harbor的每個組件都是以Docker容器的形式構(gòu)建的,可以使用Docker Compose來進(jìn)行部署。如果環(huán)境中使用了kubernetes,Harbor也提供了kubernetes的配置文件。Harbor大概需要以下幾個容器組成:ui(Harbor的核心服務(wù))、log(運行著rsyslog的容器,進(jìn)行日志收集)、mysql(由官方mysql鏡像構(gòu)成的數(shù)據(jù)庫容器)、Nginx(使用Nginx做反向代理)、registry(官方的Docker registry)、adminserver(Harbor的配置數(shù)據(jù)管理器)、jobservice(Harbor的任務(wù)管理服務(wù))、redis(用于存儲session)。

Harbor是一個用于存儲和分發(fā)Docker鏡像的企業(yè)級Registry服務(wù)器,整體架構(gòu)還是很清晰的。下面借用了網(wǎng)上的架構(gòu)圖:

Harbor依賴的外部組件
-> Nginx(即Proxy代理層): Nginx前端代理,主要用于分發(fā)前端頁面ui訪問和鏡像上傳和下載流量; Harbor的registry,UI,token等服務(wù),通過一個前置的反向代理統(tǒng)一接收瀏覽器、Docker客戶端的請求,并將請求轉(zhuǎn)發(fā)給后端不同的服務(wù)。
-> Registry v2: 鏡像倉庫,負(fù)責(zé)存儲鏡像文件; Docker官方鏡像倉庫, 負(fù)責(zé)儲存Docker鏡像,并處理docker push/pull命令。由于我們要對用戶進(jìn)行訪問控制,即不同用戶對Docker image有不同的讀寫權(quán)限,Registry會指向一個token服務(wù),強(qiáng)制用戶的每次docker pull/push請求都要攜帶一個合法的token, Registry會通過公鑰對token進(jìn)行解密驗證。
-> Database(MySQL或Postgresql):為core services提供數(shù)據(jù)庫服務(wù),負(fù)責(zé)儲存用戶權(quán)限、審計日志、Docker image分組信息等數(shù)據(jù)。

Harbor自有組件
-> Core services(Admin Server): 這是Harbor的核心功能,主要提供以下服務(wù):
-> UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image), 并對用戶進(jìn)行授權(quán)。
-> webhook:為了及時獲取registry 上image狀態(tài)變化的情況, 在Registry上配置webhook,把狀態(tài)變化傳遞給UI模塊。
-> Auth服務(wù):負(fù)責(zé)根據(jù)用戶權(quán)限給每個docker push/pull命令簽發(fā)token. Docker 客戶端向Regi?stry服務(wù)發(fā)起的請求,如果不包含token,會被重定向到這里,獲得token后再重新向Registry進(jìn)行請求。
-> API: 提供Harbor RESTful API
-> Replication Job Service:提供多個 Harbor 實例之間的鏡像同步功能。
-> Log collector:為了幫助監(jiān)控Harbor運行,負(fù)責(zé)收集其他組件的log,供日后進(jìn)行分析。

再來仔細(xì)看下Harbor主要組件和數(shù)據(jù)流走向:

-> proxy,它是一個nginx前端代理,主要是分發(fā)前端頁面ui訪問和鏡像上傳和下載流量,上圖中通過深藍(lán)色先標(biāo)識;
-> ui提供了一個web管理頁面,當(dāng)然還包括了一個前端頁面和后端API,底層使用mysql數(shù)據(jù)庫;
-> registry是鏡像倉庫,負(fù)責(zé)存儲鏡像文件,當(dāng)鏡像上傳完畢后通過hook通知ui創(chuàng)建repository,上圖通過紅色線標(biāo)識,當(dāng)然registry的token認(rèn)證也是通過ui組件完成;
-> adminserver是系統(tǒng)的配置管理中心附帶檢查存儲用量,ui和jobserver啟動時候回需要加載adminserver的配置,通過灰色線標(biāo)識;
-> jobsevice是負(fù)責(zé)鏡像復(fù)制工作的,他和registry通信,從一個registry pull鏡像然后push到另一個registry,并記錄job_log,上圖通過紫色線標(biāo)識;
-> log是日志匯總組件,通過docker的log-driver把日志匯總到一起,通過淺藍(lán)色線條標(biāo)識。

Harbor的誤區(qū)
誤區(qū)一: Harbor是負(fù)責(zé)存儲容器鏡像的 (Harbor是鏡像倉庫,那么它就應(yīng)當(dāng)是存儲鏡像的)
其實關(guān)于鏡像的存儲,Harbor使用的是官方的docker registry服務(wù)去完成,至于registry是用本地存儲或者s3都是可以的,Harbor的功能是在此之上提供用戶權(quán)限管理、鏡像復(fù)制等功能,提高使用的registry的效率。

誤區(qū)二:Harbor鏡像復(fù)制是存儲直接復(fù)制 (鏡像的復(fù)制,很多人以為應(yīng)該是鏡像分層文件的直接拷貝)
其實Harbor鏡像復(fù)制采用了一個更加通用、高屋建瓴的做法,通過docker registry 的API去拷貝,這不是省事,這種做法屏蔽了繁瑣的底層文件操作、不僅可以利用現(xiàn)有docker registry功能不必重復(fù)造輪子,而且可以解決沖突和一致性的問題。

Harbor的部署
這里不建議使用kubernetes來部署, 原因是鏡像倉庫非常重要, 盡量保證部署和維護(hù)的簡潔性, 因此這里直接使用compose的方式進(jìn)行部署。官方提供3種部署Harbor的方式:
1)在線安裝: 從Docker Hub下載Harbor的鏡像來安裝, 由于Docker Hub比較慢, 建議Docker配置好加速器。
2)離線安裝: 這種方式應(yīng)對與部署主機(jī)沒聯(lián)網(wǎng)的情況使用。需要提前下載離線安裝包: harbor-offline-installer-.tgz 到本地
3)OVA安裝: 這個主要用vCentor環(huán)境是使用

三、安裝Harbor

安裝系統(tǒng)工具插件

yum -y install yum-utils device-mapper-persistent-data lvm2

安裝docker-compose

curl -L https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composels -l /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose #查看版本 docker-compose -v

下載harbor

wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.4.tgztar zxvf harbor-offline-installer-v1.7.4.tgzcd harbor

修改配置文件

vim harbor.cfg hostname=#修改為自己的IP

啟動運行

./install.sh #執(zhí)行安裝腳本[Step 4]: starting Harbor ... Creating network "harbor_harbor" with the default driver Creating harbor-log ... done Creating registryctl ... done Creating harbor-adminserver ... done Creating registry ... done Creating harbor-db ... done Creating redis ... done Creating harbor-core ... done Creating harbor-portal ... done Creating harbor-jobservice ... done Creating nginx ... done? ----Harbor has been installed and started successfully.---- #等待安裝完成后訪問配置文件中輸入的hostname對應(yīng)的IP或域名 #默認(rèn)用戶名:admin,密碼:Harbor12345

harbor的啟動,停止

啟動停止 [root@k8s-node01 harbor]# docker-compose stop Stopping nginx ... done Stopping harbor-portal ... done Stopping harbor-jobservice ... done Stopping harbor-core ... done Stopping redis ... done Stopping harbor-db ... done Stopping harbor-adminserver ... done Stopping registry ... done Stopping registryctl ... done Stopping harbor-log ... done

使用harbor鏡像倉庫

在另外一臺docker 上添加不安全的鏡像倉庫

[root@k8s-node02 ~]# vim /etc/docker/daemon.json [root@k8s-node02 ~]# cat /etc/docker/daemon.json{"insecure-registries": ["http://192.168.10.101:80"] #修改192.168.10.101為自己的ip}

重啟docker

systemctl daemon-reload systemctl restart docker

登錄并上傳鏡像

在Harbor管理頁面創(chuàng)建一個項目

[root@k8s-master ~]# docker login -u admin --password Harbor12345 http://192.168.10.101 WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded #此時已經(jīng)登錄成功,進(jìn)行上傳鏡像 #步驟一:進(jìn)行tag的更改 語法格式:docker tag SOURCE_IMAGE[:TAG] 192.168.10.101:80/test-k8s/IMAGE[:TAG]#其中SOURCE_IMAGE[:TAG]為需要更改tag的源鏡像#192.168.10.101:80為harbor服務(wù)器地址,不添加端口號默認(rèn)為https訪問#test-k8s:為horbor服務(wù)器中的項目名稱#IMAGE[:TAG] 為生成的鏡像名稱及tag[root@k8s-master ~]# docker tag nginx:1.7.9 192.168.10.101:80/test-k8s/nginx:1.7.9[root@k8s-master ~]# docker images | grep test-k8s 192.168.10.101:80/test-k8s/nginx 1.7.9 84581e99d807 6 years ago 91.7MB [root@k8s-master ~]# docker push 192.168.10.101:80/test-k8s/nginx:1.7.9 5f70bf18a086: Pushed 4b26ab29a475: Pushed ccb1d68e3fb7: Pushed e387107e2065: Pushed 63bf84221cce: Pushed e02dce553481: Pushed dea2e4984e29: Pushed 1.7.9: digest: sha256:b1f5935eb2e9e2ae89c0b3e2e148c19068d91ca502e857052f14db230443e4c2 size: 3012

上傳完成后前往horbor確認(rèn)


此時鏡像已經(jīng)上傳完成

K8s 訪問私有倉庫

默認(rèn)是可以拉取公開倉庫的鏡像,但如果是私有倉庫就需要進(jìn)行認(rèn)證
測試私有倉庫

#登錄harbor倉庫 [root@k8s-master ~]# docker login -u admin --password Harbor12345 http://192.168.10.101 #登錄后會在當(dāng)前家目錄生成.docker/config.json,此文件為docker認(rèn)證文件 [root@k8s-master ~]# cat .docker/config.json {"auths": {"47.100.126.187:80": {"auth": "YWRtaW46YXB0ZWNoMSE="}} 使用此文件進(jìn)行創(chuàng)建secret [root@k8s-master ~]# kubectl create secret docker-registry docker-login --docker-username=admin --docker-password=Harbor12345 --docker-server=192.168.10.101:80#docker-logi為secret名稱#--docker-username= 為habor的用戶#--docker-password= 為habor的用戶密碼#--docker-server= 為harbor服務(wù)器ip及端口 [root@k8s-master ~]# kubectl get secrets | grep docker docker-login kubernetes.io/dockerconfigjson 1 25m

測試?yán)$R像
vim test.yaml

apiVersion: apps/v1 kind: Deployment metadata:labels:app: testname: testnamespace: default spec:replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: teststrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: testspec:containers:- image: 47.100.126.187:80/test-k8s/nginx:1.7.9 #私有倉庫鏡像imagePullPolicy: IfNotPresentname: nginximagePullSecrets: #使用secrets - name: docker-login #驗證鏡像拉取 [root@k8s-master ~]# kubectl apply -f test.yaml[root@k8s-master ~]# kubectl describe pod test-c8db9dffd-9r9k5 Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 8m32s default-scheduler Successfully assigned default/test-c8db9dffd-9r9k5 to minikubeNormal Pulled 8m31s kubelet Container image "192.168.10.101:80/test-k8s/nginx:1.7.9" already present on machineNormal Created 8m31s kubelet Created container nginxNormal Started 8m31s kubelet Started container nginx [root@k8s-master ~]# kubectl get pod | grep test test-c8db9dffd-9r9k5 1/1 Running 0 9m40s #此時pod已經(jīng)正常運行了

總結(jié)

以上是生活随笔為你收集整理的一:部署harbor镜像仓库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。