七,Harbor HA:環境准備
- 全新安裝兩台harbor,但不要着急執行
./install
(如果用舊的要清理下數據)- 要做Harbor高可用,我們需要准備一台NFS服務器共享2台harbor的數據存儲目錄,在生產環境中,我們可以選則Ceph或者Glusterfs
- 我們需要一台Postgres數據庫給Harbor的clair漏洞掃描組件使用
- 我們需要一台MySQL數據庫給Harbor使用
- 我們需要一台redis數據庫給session使用
主機 | IP | 用途 | VIP |
---|---|---|---|
harbor-master | 192.168.200.70 | Harbor鏡像倉庫-主 | 192.168.200.244 |
harbor-slave | 192.168.200.109 | Harbor鏡像倉庫-備 | |
dns-nfs | 192.168.200.1110 | DNS服務器和NFS服務器端(harbor HA文件存儲) |
(1)在dns-nfs上搭建nfs服務端 ip4轉發開開
為了省事兒把nfs服務端裝在DNS服務器上
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
mkdir -p /data/nfs
yum -y install nfs-utils
vim /etc/exports
cat /etc/exports
/data/nfs 192.168.200.0/24(rw,no_root_squash)
#默認root用戶存的東西不降權
systemctl start nfs
(2)在harbor主和備上創建數據掛載目錄,並安裝nfs節點支持包(主備操作都一樣)
yum -y install nfs-utils
mkdir -p /data/storage
mount 192.168.200.110:/data/nfs /data/storage
df -hT | grep /data/nfs
(3)在LDNS-NFS(NFS服務器端)啟動一個redis容器
下載一個redis鏡像(apline系統目前docker領域很火,因為它容量很小,比centos小很多)
docker pull redis:alpine
docker images
啟動redis鏡像,映射端口
docker run -dit --name redis_test -p 6379:6379 redis:alpine
docker ps -a
(4) 在LDNS-NFS(NFS服務器端)啟動一個postgreSQL數據庫容器
下載postgres
docker pull postgres
docker images
docker run -dit --name postgres_test -p 5432:5432 -e POSTGRES_PASSWORD=123123 postgres
docker ps -a
(5) 在LDNS-NFS(NFS服務端)啟動一個MySQL數據容器
下載MySQL 5.6版鏡像
docker pull mysql:5.6
docker images
docker run -dit --name mysql_test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=utf8
docker ps -a
(6)最后按照用途,我們分別給數據庫改一下名稱
docker ps -a
docker rename postgres_test clair_db
docker rename mysql_test harbor_db
docker rename redis_test session
docker ps -a
八,Harbor HA:修改配置
8.1 Harbor-Master向mysql_db容器里導入數據表(192.168.200.110)
再解壓后的harbor的ha目錄下的registry.sql表導入到我們之前在NFS服務端上創建的MySQL容器里
cd /data/install/harbor
ls
tree ha
ha
├── docker-compose.clair.tpl
├── docker-compose.clair.yml
├── docker-compose.tpl
├── docker-compose.yml #需要修改的配置文件
├── registry.sql #需要導入的mysql表格
└── sample
├── active_active
│ ├── check.sh
│ └── keepalived_active_active.conf
└── active_standby
├── check_harbor.sh
└── keepalived_active_standby.conf
3 directories, 9 files
Harbor-master本地安裝mysql客戶端連接程序
yum -y install mysql
which mysql
遠程連接到192.168.200.110(NFS服務器端)的3306端口 導入表registry.sql
mysql -uroot -p123123 -h192.168.200.110 -P3306
show databases;
source ha/registry.sql
show databases;
特別提示:如果導入表格出現如下錯誤
Specified key was too long; max key length is 767 bytes
這是因為導入的表格建立的索引超過mysql默認上線767bytes >=254 因此我們需要修改導入的表
cat -n ha/registry.sql | sed -n '220p;291p'
220 repository varchar(256) NOT NULL, #將256改成254
291 resource_name varchar(256), #將256改成254
#改完之后在進行表格導入就不會報錯了
vim ha/registry.sql
cat -n ha/registry.sql | sed -n '220p;291p'
再次導入表registry.sql
mysql -uroot -p123123 -h192.168.200.110 -P3306
show databases;
source ha/registry.sql
show databases;
8.2 修改配置文件
修改/data/install/ha/docker-compose.yml配置文件(備庫也要改!!)
cat -n ha/docker-compose.yml | sed -n '19p'
19 /data/registry:/storage:z
vim ha/docker-compose.yml
cat -n ha/docker-compose.yml | sed -n '19p'
19 /data/storage:/storage:z #修改成我們的nfs共享目錄
修改/data/install/harharbor.cfg文件
cat -n harbor.cfg | sed -n '7p;11p;23p;24p;68p;130p;133p;136p;139p;145p;150p;154p;157p;160p;163p'
7 hostname = reg.mydomain.com #harbor的訪問域名
11 ui_url_protocol = http #web訪問連接方式
23 ssl_cert = /data/cert/server.crt #ca證書路徑
24 ssl_cert_key = /data/cert/server.key #ca密鑰路徑
68 harbor_admin_password = Harbor12345 #harbor默認初始密碼
130 db_host = mysql #harbor連接的mysql_db的IP
133 db_password = root123 #MySQL連接密碼
136 db_port = 3306 #MySQL連接端口
139 db_user = root #MySQL連接用戶
145 redis_url = redis:6379 #session連接的redis數據庫路徑
150 clair_db_host = postgres #clair漏洞檢測組件連接的數據庫IP
154 clair_db_password = password #postgres數據庫連接密碼
157 clair_db_port = 5432 #postgres數據庫連接端口
160 clair_db_username = postgres #默認的連接用戶名
163 clair_db = postgres #默認的庫名
修改成如下所示(主備都一樣)
vim harbor.cfg
scp harbor.cfg 192.168.200.109:/data/install/harbor/
cat -n harbor.cfg | sed -n '7p;11p;23p;24p;68p;130p;133p;136p;139p;145p;150p;154p;157p;160p;163p'
7 hostname = www.yunjisuan.com
11 ui_url_protocol = https
23 ssl_cert = /etc/ssl/harbor/www.yunjisuan.com.crt
24 ssl_cert_key = /etc/ssl/harbor/www.yunjisuan.com.key
68 harbor_admin_password = Harbor12345
130 db_host = 192.168.200.110
133 db_password = 123123
136 db_port = 3306
139 db_user = root
145 redis_url = 192.168.200.110:6379
150 clair_db_host = 192.168.200.110
154 clair_db_password = 123123
157 clair_db_port = 5432
160 clair_db_username = postgres
163 clair_db = postgres
九,Harbor HA:啟動Harbor
把證書信任給主,備,DNS-NFS 三台都得信任 ,信任之后都得重啟docker!
mkdir -p /etc/ssl/harbor --->提前在nfs服務器創建目錄
在主上把證書信任,並都發送給備和nfs,信任之后重啟docker
cd /data/ssl/
cp www.yunjisuan.com.crt www.yunjisuan.com.key /etc/ssl/harbor
cp www.yunjisuan.com.crt /etc/pki/ca-trust/source/anchors/
scp www.yunjisuan.com.crt www.yunjisuan.com.key 192.168.200.109:/etc/ssl/harbor
scp www.yunjisuan.com.crt www.yunjisuan.com.key 192.168.200.110:/etc/ssl/harbor
update-ca-trust enable
update-ca-trust extract
systemctl restart docker
在備上把證書信任,信任之后重啟docker
cd /etc/ssl/harbor
cp www.yunjisuan.com.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust enable
update-ca-trust extract
systemctl restart docker
在nfs上把證書信任,信任之后重啟docker
cd /etc/ssl/harbor
cp www.yunjisuan.com.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust enable
update-ca-trust extract
systemctl restart docker
DNS-NFS上的docker進程開啟 (重啟之后就關了)
docker ps -a
docker start harbor_db
docker startclair_db
docker start session
docker ps -a
啟動harbor-master
cd /data/install/harbor
./install.sh --with-clair --ha
因為使用了自定義存儲路徑,安裝途中需要yes確認
主和備兩台最好一個一個的啟動,免得沖突
進行Harbor-master的IP瀏覽器進行訪問測試
在DNS-NFS上進行上傳測試
修改映射
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.70 www.yunjisuan.com
上傳一個鏡像進行測試
docker login -uadmin -pHarbor12345 www.yunjisuan.com
docker images
docker tag redis:alpine www.yunjisuan.com/library/redis:v1
docker push www.yunjisuan.com/library/redis:v1
在主上查看測試結果
ls /data/storage
啟動harbor-slave
cd /data/install/harbor
./install.sh --with-clair --ha
因為使用了自定義存儲路徑,安裝途中需要yes確認