Harbor私有镜像仓库(下)
七,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确认