国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Harbor搭建高可用Docker私有倉(cāng)庫(kù)的研究與實(shí)現(xiàn)

2022-08-31 18:11程寧
電腦知識(shí)與技術(shù) 2022年18期

摘要:隨著容器技術(shù)的廣泛應(yīng)用,越來越多的大中型企業(yè)在生產(chǎn)環(huán)境中通過Harbor部署Docker私有倉(cāng)庫(kù)。從高可用角度考慮,如何解決在生產(chǎn)環(huán)境中因出現(xiàn)單點(diǎn)故障從而對(duì)項(xiàng)目開發(fā)造成影響并造成經(jīng)濟(jì)損失的問題變得尤為重要。該文通過對(duì)比三種Harbor高可用性方案后,對(duì)基于共享服務(wù)的Harbor同步方案進(jìn)行實(shí)現(xiàn)。

關(guān)鍵詞:Harbor;高可用;Docker;私有倉(cāng)庫(kù)

中圖分類號(hào):TP393? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

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

開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):

1 引言

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

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

從高可性角度考慮,在生產(chǎn)環(huán)境中選用搭建單節(jié)點(diǎn)的Harbor,則可能出現(xiàn)當(dāng)單節(jié)點(diǎn)Harbor發(fā)生故障時(shí),其從開發(fā)到交付的流水線就可能癱瘓,造成相應(yīng)的經(jīng)濟(jì)損失。因此在利用Harbor搭建企業(yè)內(nèi)部的Docker私有倉(cāng)庫(kù)時(shí),如何設(shè)計(jì)Harbor高可用性方案是多數(shù)企業(yè)在生產(chǎn)環(huán)境中需要關(guān)注的問題。本文通過對(duì)3種Harbor高可用性方案進(jìn)行對(duì)比,對(duì)基于共享服務(wù)的harbor同步方案加以實(shí)現(xiàn)。

2 Harbor高可用性方案概述

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

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

該方案通過構(gòu)建Harbor主節(jié)點(diǎn)和多個(gè)Harbor從節(jié)點(diǎn),利用Harbor官方提供的主從復(fù)制方案來解決鏡像同步的問題。通過將Harbor主節(jié)點(diǎn)的鏡像同步到Harbor從節(jié)點(diǎn),即一主多從的鏡像發(fā)布模式,從而解決大規(guī)模鏡像發(fā)布的問題。同時(shí)從滿足大量節(jié)點(diǎn)的下載需注,還需在多個(gè)Harbor節(jié)點(diǎn)做負(fù)載均衡,如圖1所示。

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

① 當(dāng)某從節(jié)點(diǎn)的鏡像倉(cāng)庫(kù)出現(xiàn)故障,其對(duì)應(yīng)的客戶端將指向其他從節(jié)點(diǎn),其他從節(jié)點(diǎn)存在因負(fù)載過重導(dǎo)致故障問題。

② 當(dāng)將鏡像推送到主節(jié)點(diǎn)的鏡像倉(cāng)庫(kù)后,與其他從節(jié)點(diǎn)進(jìn)行同步仍需一段時(shí)間,存在短暫時(shí)間內(nèi)各鏡像倉(cāng)庫(kù)不一致的問題,若上傳的鏡像數(shù)量多、網(wǎng)絡(luò)帶寬不足,延時(shí)時(shí)間將會(huì)更長(zhǎng)。若在鏡像同步過程中出現(xiàn)網(wǎng)絡(luò)故障,存在從節(jié)點(diǎn)因無法同步,后期需花費(fèi)大量時(shí)間進(jìn)行修復(fù)工作。

③ 由于所有節(jié)點(diǎn)都存儲(chǔ)全部鏡像副本,從節(jié)點(diǎn)數(shù)量越多,耗費(fèi)的空間就越大。

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

該方案主要通過構(gòu)建多個(gè)Harbor節(jié)點(diǎn),在多個(gè)harbor節(jié)點(diǎn)之間利用主從復(fù)制同步方案來實(shí)現(xiàn)節(jié)點(diǎn)之間的雙向同步,以保證數(shù)據(jù)的一致性。并通過配置負(fù)載均衡實(shí)現(xiàn)多個(gè)Harbor節(jié)點(diǎn)對(duì)外提供單一的harbor服務(wù)。具體方案如圖2所示。

如圖2所示,當(dāng)客戶端發(fā)出請(qǐng)求后,由負(fù)載均衡器接收的請(qǐng)求分流到不同的Harbor節(jié)點(diǎn),只要有一個(gè)Harbor節(jié)點(diǎn)中有新鏡像,就會(huì)通過同步復(fù)制策略將新鏡像復(fù)制給其他的Harbor節(jié)點(diǎn)。這樣即使有一個(gè)Harbor節(jié)點(diǎn)出現(xiàn)故障,其他的Harbor節(jié)點(diǎn)仍然可以提供服務(wù),從而在一定程度上實(shí)現(xiàn)Harbor高可用性。

但該方案的主要問題是無法保障鏡像的一致性,即假設(shè)當(dāng)某Harbor節(jié)點(diǎn)出現(xiàn)故障,該Harbor節(jié)點(diǎn)不能提供服務(wù)時(shí),如果有新鏡像進(jìn)來,則該鏡像會(huì)分流到其他的Harbor節(jié)點(diǎn),后面即使恢復(fù)出現(xiàn)故障的Harbor節(jié)點(diǎn),其他Harbor節(jié)點(diǎn)也不會(huì)自動(dòng)將新鏡像同步到恢復(fù)的Harbor節(jié)點(diǎn)。需要手動(dòng)在其他Harbor節(jié)點(diǎn)上開啟同步復(fù)制策略,才能進(jìn)行數(shù)據(jù)同步,保證各Harbor節(jié)點(diǎn)數(shù)據(jù)的一致性。

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

該方案主要通過多個(gè)Harbor節(jié)點(diǎn)共享PostgreSQL、Redis、MySQL和后端存儲(chǔ),通過負(fù)載均衡器實(shí)現(xiàn)多個(gè)Harbor實(shí)例提供Harbor服務(wù)。具體方案如圖3所示。

如圖所示,當(dāng)客戶端發(fā)出請(qǐng)求后,由負(fù)載均衡器接收的請(qǐng)求分流到不同的Harbor節(jié)點(diǎn)。由于多個(gè)harbor節(jié)點(diǎn)共享同一后端存儲(chǔ),因此任何一個(gè)harbor節(jié)點(diǎn)均可以讀取到持久化存儲(chǔ)在后端存儲(chǔ)上的鏡像,即使某Harbor節(jié)點(diǎn)出現(xiàn)故障,后期恢復(fù)故障后,也不會(huì)出現(xiàn)各Harbor節(jié)點(diǎn)數(shù)據(jù)不一致的問題。因此該方案在實(shí)際生產(chǎn)環(huán)境中比較具有可行性。

3 基于共享服務(wù)的harbor同步方案的實(shí)現(xiàn)

本方案選用的案例以四臺(tái)部署在VMware Workstation 15中的Centos7.2虛擬機(jī)作為宿主機(jī),均已預(yù)先安裝好Docker,并與外網(wǎng)互通,且關(guān)閉防火墻和Selinux配置,各節(jié)點(diǎn)基本信息如表1所示[5]。

步驟1:NFS后端存儲(chǔ)的部署。

(1)在nfsstorage節(jié)點(diǎn)上配置

[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主從節(jié)點(diǎn)上都需配置,本案例僅以harbor-master節(jié)點(diǎn)為例。

[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節(jié)點(diǎn)配置mysql、redis、postgres容器,以給harbor提供外部數(shù)據(jù)庫(kù)數(shù)據(jù)讀取。

[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主從節(jié)點(diǎn)上都需配置進(jìn)行Harbor部署,本案例僅以主節(jié)點(diǎn)為例。

(1)將harbor安裝包解壓

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

(2)將harbor目錄下ha子目錄的registry.sql文件導(dǎo)入nfsstorage節(jié)點(diǎn)的mysql數(shù)據(jù)庫(kù)。

[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)將自簽發(fā)的域名證書添加到系統(tǒng)信任,并設(shè)置證書立即生效

[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)部署并啟動(dòng)harbor

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

步驟4:DNS配置

(1)在ldns節(jié)點(diǎn)進(jìn)行DNS配置,配置完后,能夠正常解析主從節(jié)點(diǎn)和Vip節(jié)點(diǎn)。

(2)在所在節(jié)點(diǎn)配置/etc/reslove.conf文件,添加如下內(nèi)容。

nameserver 192.168.200.40

步驟5:將主節(jié)點(diǎn)的相應(yīng)證書復(fù)制到從節(jié)點(diǎn)

[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,實(shí)現(xiàn)vip,配置完成后,harbor-master節(jié)點(diǎn)為vip的主節(jié)點(diǎn),harbor-salve節(jié)點(diǎn)為vip的備用節(jié)點(diǎn),驗(yàn)證效果如下所示。

[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 結(jié)語

本文通過對(duì)比Harbor主從復(fù)制同步、Harbaor多主復(fù)制同步和基于共享服務(wù)的Harbor同步方案,選擇三個(gè)方案中最優(yōu)的基于共享服務(wù)的harbor同步方案加以實(shí)現(xiàn)。該方案解決了在生產(chǎn)環(huán)境中利用Harbor搭建私有倉(cāng)庫(kù)的單點(diǎn)故障問題,極大地提高了鏡像傳輸效率,并為利用其他技術(shù)搭建Docker私有倉(cāng)庫(kù)提供了一定的借鑒思想。

參考文獻(xiàn):

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

[2] 劉亞.關(guān)于Docker鏡像倉(cāng)庫(kù)技術(shù)的研究[J].科學(xué)技術(shù)創(chuàng)新,2021(29):76-78.

[3] 劉京義.使用Harbor創(chuàng)建Docker企業(yè)私有庫(kù)[J].網(wǎng)絡(luò)安全和信息化,2021(5):99-104.

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

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

【通聯(lián)編輯:代影】

壤塘县| 黄陵县| 满洲里市| 苏尼特右旗| 新泰市| 富蕴县| 蒲江县| 平遥县| 兰考县| 大理市| 峨眉山市| 杭锦旗| 南通市| 临邑县| 江口县| 永靖县| 黄龙县| 锡林浩特市| 大名县| 西城区| 台江县| 卫辉市| 土默特右旗| 海淀区| 静宁县| 泰宁县| 和顺县| 来宾市| 鄯善县| 翁源县| 化隆| 平果县| 财经| 胶州市| 潮安县| 呈贡县| 石嘴山市| 泰兴市| 行唐县| 类乌齐县| 玉门市|