999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Harbor搭建高可用Docker私有倉庫的研究與實現

2022-08-31 18:11:44程寧
電腦知識與技術 2022年18期

摘要:隨著容器技術的廣泛應用,越來越多的大中型企業在生產環境中通過Harbor部署Docker私有倉庫。從高可用角度考慮,如何解決在生產環境中因出現單點故障從而對項目開發造成影響并造成經濟損失的問題變得尤為重要。該文通過對比三種Harbor高可用性方案后,對基于共享服務的Harbor同步方案進行實現。

關鍵詞:Harbor;高可用;Docker;私有倉庫

中圖分類號:TP393? ? ? ? 文獻標識碼:A

文章編號:1009-3044(2022)18-0028-03

開放科學(資源服務)標識碼(OSID):

1 引言

隨著云計算的飛速發展,容器技術的使用越來越普遍,容器作為鏡像創建的運行實例,消除了線上和線下的環境差異,可以保證應用生命周期環境的一致性和標準化,因此更好地進行Docker鏡像管理變得尤為重要。雖然用戶可以從Docker公有倉庫上下載所需鏡像,但從鏡像的安全性和上傳下載效率等各方面考慮,在企業內部部署Dockert私有倉庫變得尤為重要[1]。

Docker私有倉庫的搭建可利用Registry和Harbor兩種形式。Registry是Docker官方的一個私有倉庫鏡像,可以將本地的鏡像打標簽進行標記,然后push到以Registry創建的容器的私有倉庫中,但Registy不提供WEB界面,不便于管理[2]。Harbor作為一個用于存儲和分發Docker鏡像的企業級Registry服務器,提供管理UI,基于角色的訪問控制,AD/LDAP集成,審計日志等企業用戶需求的功能[3]。因此眾多大中型企業用戶在生產環境中選擇利用Harbor來搭建企業內部的Docker私有倉庫,以提高在生產環境傳輸鏡像的效率。

從高可性角度考慮,在生產環境中選用搭建單節點的Harbor,則可能出現當單節點Harbor發生故障時,其從開發到交付的流水線就可能癱瘓,造成相應的經濟損失。因此在利用Harbor搭建企業內部的Docker私有倉庫時,如何設計Harbor高可用性方案是多數企業在生產環境中需要關注的問題。本文通過對3種Harbor高可用性方案進行對比,對基于共享服務的harbor同步方案加以實現。

2 Harbor高可用性方案概述

Harbor高可用性主要解決單點故障問題。從允許服務中斷的時間以及可以承受的成本和損失的角度考慮,通常有以下幾種解決方案。

(1)Harbor主從復制同步方案

該方案通過構建Harbor主節點和多個Harbor從節點,利用Harbor官方提供的主從復制方案來解決鏡像同步的問題。通過將Harbor主節點的鏡像同步到Harbor從節點,即一主多從的鏡像發布模式,從而解決大規模鏡像發布的問題。同時從滿足大量節點的下載需注,還需在多個Harbor節點做負載均衡,如圖1所示。

該方案雖然在一定程度上解決了鏡像同步的問題,但當Harbor主節點出現故障后,各Harbor從節點將無法同步,因此該方案仍然沒有解決Harbor主節點單點故障的問題。此外,主從模式還存在以下缺陷[4]。

① 當某從節點的鏡像倉庫出現故障,其對應的客戶端將指向其他從節點,其他從節點存在因負載過重導致故障問題。

② 當將鏡像推送到主節點的鏡像倉庫后,與其他從節點進行同步仍需一段時間,存在短暫時間內各鏡像倉庫不一致的問題,若上傳的鏡像數量多、網絡帶寬不足,延時時間將會更長。若在鏡像同步過程中出現網絡故障,存在從節點因無法同步,后期需花費大量時間進行修復工作。

③ 由于所有節點都存儲全部鏡像副本,從節點數量越多,耗費的空間就越大。

(2)Harbaor多主復制同步方案

該方案主要通過構建多個Harbor節點,在多個harbor節點之間利用主從復制同步方案來實現節點之間的雙向同步,以保證數據的一致性。并通過配置負載均衡實現多個Harbor節點對外提供單一的harbor服務。具體方案如圖2所示。

如圖2所示,當客戶端發出請求后,由負載均衡器接收的請求分流到不同的Harbor節點,只要有一個Harbor節點中有新鏡像,就會通過同步復制策略將新鏡像復制給其他的Harbor節點。這樣即使有一個Harbor節點出現故障,其他的Harbor節點仍然可以提供服務,從而在一定程度上實現Harbor高可用性。

但該方案的主要問題是無法保障鏡像的一致性,即假設當某Harbor節點出現故障,該Harbor節點不能提供服務時,如果有新鏡像進來,則該鏡像會分流到其他的Harbor節點,后面即使恢復出現故障的Harbor節點,其他Harbor節點也不會自動將新鏡像同步到恢復的Harbor節點。需要手動在其他Harbor節點上開啟同步復制策略,才能進行數據同步,保證各Harbor節點數據的一致性。

(3)基于共享服務的Harbor同步方案

該方案主要通過多個Harbor節點共享PostgreSQL、Redis、MySQL和后端存儲,通過負載均衡器實現多個Harbor實例提供Harbor服務。具體方案如圖3所示。

如圖所示,當客戶端發出請求后,由負載均衡器接收的請求分流到不同的Harbor節點。由于多個harbor節點共享同一后端存儲,因此任何一個harbor節點均可以讀取到持久化存儲在后端存儲上的鏡像,即使某Harbor節點出現故障,后期恢復故障后,也不會出現各Harbor節點數據不一致的問題。因此該方案在實際生產環境中比較具有可行性。

3 基于共享服務的harbor同步方案的實現

本方案選用的案例以四臺部署在VMware Workstation 15中的Centos7.2虛擬機作為宿主機,均已預先安裝好Docker,并與外網互通,且關閉防火墻和Selinux配置,各節點基本信息如表1所示[5]。

步驟1:NFS后端存儲的部署。

(1)在nfsstorage節點上配置

[root@nfsstorage ~]# mkdir -p /data/nfs

[root@nfsstorage ~]# yum -y install nfs-utils rpcbind

[root@nfsstorage ~]# cat "/data/nfs? ?192.168.200.0/24(rw,no_root_squash)">/etc/exports

[root@nfsstorage ~]# systemctl restart rpcbind

[root@nfsstorage ~]# systemctl restart nfs

(2)在harbor主從節點上都需配置,本案例僅以harbor-master節點為例。

[root@harbor-master ~]# yum -y install nfs-utils rpcbind

[root@harbor-master ~]# systemctl start rpcbind

[root@harbor-master ~]# systemctl start nfs

[root@harbor-master ~]# mount 192.168.200.30:/data/nfs /data/storage/

[root@harbor-master ~]# vim /etc/fstab

192.168.200.30:/data/nfs? /data/storage? ?nfs4? ? ? ? defaults,_netdev? ? 0? ?0

步驟2:在nfsstorage節點配置mysql、redis、postgres容器,以給harbor提供外部數據庫數據讀取。

[root@nfsstorage ~]# docker run -itd --name redis_test -p 6379:6379 redis:alpine

[root@nfsstorage ~]# docker run -itd --name postgres_test -p 5432:5432 -e POSTGRES_PASSWORD=123123 postgres:latest

[root@nfsstorage ~]# docker run -itd --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8

[root@nfsstorage ~]# docker rename postgres_test clair_db

[root@nfsstorage ~]# docker rename mysql_test harbor_db

[root@nfsstorage ~]# docker rename redis_test session

步驟3:在harbor主從節點上都需配置進行Harbor部署,本案例僅以主節點為例。

(1)將harbor安裝包解壓

[root@harbor-master ~]# tar -zxvf harbor-offline-installer-v1.5.0.tgz

(2)將harbor目錄下ha子目錄的registry.sql文件導入nfsstorage節點的mysql數據庫。

[root@harbor-master ~]# yum -y insatall mariadb

[root@harbor-master ~]# mysql -uroot -p123123 -h192.168.200.30 -P3306 < harbor/ha/registry.sql

(3)修改docker-compose.yml配置文件。

[root@harbor-master harbor]# vim ha/docker-compose.yml

- /data/storage:/storage:z

(4)修改harbor目錄下harbor.cfg文件

hostname = www.cnhbliti.com

ui_url_protocol = https

ssl_cert = /etc/ssl/harbor/www.cnhbliti.com.crt

ssl_cert_key = /etc/ssl/harbor/www.cnhbliti.com.key

harbor_admin_password = Harbor12345

db_host = 192.168.200.30

db_password = 123123

db_port = 3306

db_user = root

redis_url = 192.168.200.30:6379

clair_db_host = 192.168.200.30

clair_db_password = 123123

clair_db_port = 5432

clair_db_username = postgres

clair_db = postgres

(5)配置https

[root@harbor-master harbor]# yum -y install opssl

[root@harbor-master harbor]# mkdir -p /data/ssl

[root@slave harbor]# cd /data/ssl

[root@harbor-master ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt

[root@harbor-master ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.cnhbliti.com.key -out www.cnhbliti.com.csr

[root@harbor-master ~]# openssl x509 -req -days 365 -in www.cnhbliti.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.cnhbliti.com.crt

(6)將自簽發的域名證書添加到系統信任,并設置證書立即生效

[root@harbor-master ssl]# cp www.cnhbliti.com.crt /etc/pki/ca-trust/source/anchors/

[root@harbor-master ssl]# update-ca-trust extract

[root@harbor-master ssl]# update-ca-trust enable

[root@harbor-master ssl]# mkdir -p /etc/ssl/harbor

[root@harbor-master ssl]# cp /data/ssl/www.cnhbliti.com.key /etc/ssl/harbor/

[root@harbor-master ssl]# cp /data/ssl/www.cnhbliti.com.crt /etc/ssl/harbor/

[root@harbor-master ssl]# ll /etc/ssl/harbor/

(7)部署并啟動harbor

[root@harbor-master harbor]# ./install.sh --with-clair --ha

步驟4:DNS配置

(1)在ldns節點進行DNS配置,配置完后,能夠正常解析主從節點和Vip節點。

(2)在所在節點配置/etc/reslove.conf文件,添加如下內容。

nameserver 192.168.200.40

步驟5:將主節點的相應證書復制到從節點

[root@harbor-master ssl]# scp www.cnhbliti.com.crt 192.168.200.20:/etc/pki/ca-trust/source/anchors/

[root@harbor-master ssl]# scp /data/ssl/www.cnhbliti.com.key 192.168.200.20:/etc/ssl/harbor/

[root@harbor-master ssl]# scp /data/ssl/www.cnhbliti.com.crt 192.168.200.20:/etc/ssl/harbor/

步驟6:部署keepalive,實現vip,配置完成后,harbor-master節點為vip的主節點,harbor-salve節點為vip的備用節點,驗證效果如下所示。

[root@harbor-master ssl]# ip addr | grep 192.168.200.100

inet 192.168.200.100/32 scope global ens34

[root@harbor-master ssl]# systemctl stop network

[root@harbor-master ssl]# ip addr | grep 192.168.200.100

inet 192.168.200.100/32 scope global ens34

4 結語

本文通過對比Harbor主從復制同步、Harbaor多主復制同步和基于共享服務的Harbor同步方案,選擇三個方案中最優的基于共享服務的harbor同步方案加以實現。該方案解決了在生產環境中利用Harbor搭建私有倉庫的單點故障問題,極大地提高了鏡像傳輸效率,并為利用其他技術搭建Docker私有倉庫提供了一定的借鑒思想。

參考文獻:

[1] 李群.企業級Docker Registry(Harbor)的研究[J].數碼設計,2019(7):105-106.

[2] 劉亞.關于Docker鏡像倉庫技術的研究[J].科學技術創新,2021(29):76-78.

[3] 劉京義.使用Harbor創建Docker企業私有庫[J].網絡安全和信息化,2021(5):99-104.

[4] 王曉峰,向超勝,牛軍,等.電信行業分布式鏡像倉庫的研究[J].電信技術,2017(9):36-38.

[5] 程寧,戴遠泉.基于Jenkins持續集成部署研究與實現[J].電子制作,2021(22):46-48.

【通聯編輯:代影】

主站蜘蛛池模板: 久久永久精品免费视频| 天堂在线视频精品| 国产 日韩 欧美 第二页| 国产a网站| 欧洲一区二区三区无码| 午夜a级毛片| 亚洲天堂色色人体| 欧美全免费aaaaaa特黄在线| 在线观看无码a∨| 午夜激情婷婷| 男人天堂亚洲天堂| 欧美精品一区在线看| 国产精品无码AⅤ在线观看播放| 亚洲AV电影不卡在线观看| 丝袜无码一区二区三区| a级毛片在线免费| 国产精品林美惠子在线观看| 国产在线无码一区二区三区| 永久免费无码日韩视频| 秋霞午夜国产精品成人片| 亚洲成AV人手机在线观看网站| 亚洲国产AV无码综合原创| 制服丝袜 91视频| 久久性妇女精品免费| 国产福利一区视频| 青青青视频蜜桃一区二区| 一级毛片无毒不卡直接观看| 亚洲欧美日韩另类在线一| 国产欧美视频一区二区三区| 在线观看国产黄色| 97人人模人人爽人人喊小说| 精品人妻一区无码视频| 色网在线视频| 亚洲中久无码永久在线观看软件| 久久久久久久蜜桃| 国产一区在线观看无码| m男亚洲一区中文字幕| 成人午夜视频网站| 亚洲精品免费网站| 国产成人精品日本亚洲77美色| 人妻91无码色偷偷色噜噜噜| 99这里精品| 久久精品国产国语对白| 中文国产成人久久精品小说| 在线高清亚洲精品二区| 久久国产成人精品国产成人亚洲 | 国产精品55夜色66夜色| 无码电影在线观看| 欧美在线伊人| 国产中文在线亚洲精品官网| 亚洲精品亚洲人成在线| 国产中文一区a级毛片视频| 在线综合亚洲欧美网站| 亚洲无码37.| 亚洲精品人成网线在线 | 午夜福利亚洲精品| 美女扒开下面流白浆在线试听 | 国产91特黄特色A级毛片| 激情午夜婷婷| 亚洲中文字幕23页在线| 美女一区二区在线观看| 国产成人免费视频精品一区二区| 国产精品免费入口视频| 国产女人在线视频| 国产网站免费看| 亚洲精品少妇熟女| 精品视频第一页| 久久77777| 欧美天堂在线| 国产打屁股免费区网站| 日本成人不卡视频| 亚洲欧美另类日本| 国模极品一区二区三区| 国产极品嫩模在线观看91| 国产一级在线观看www色| 日韩视频精品在线| 日韩东京热无码人妻| 午夜成人在线视频| 99色亚洲国产精品11p| 亚洲成人在线免费观看| 欧美一区二区人人喊爽| 国产精品99一区不卡|