Harbor 高可用部署
系统架构
部署信息
主机 | IP |
---|---|
harbor1 | 10.0.0.1 |
harbor2 | 10.0.0.2 |
db | 10.0.0.3 |
NAS | 10.0.0.100:/ |
软件 | 版本 |
---|---|
docker | 20.10.12 |
docker-compose | 1.23.1 |
harbor | 2.2.1 |
一、Docker
安装
1. 使用国内 yum
源
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. 卸载旧版本的 docker
## 如果主机上已经有docker存在且不是想要安装的版本,需要先进行卸载。
# yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
container*
3. 安装 Docker20.10
版本
# yum -y install docker-ce-20.10.12-3.el7 docker-ce-cli-20.10.12-3.el7
4. 设置镜像加速
# mkdir /etc/docker
# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxxxxxx.mirror.aliyuncs.com"]
}
5. 启动 docker
# systemctl start docker
# systemctl enable docker
# systemctl status docker
二、Docker-compose
安装
1. Docker-compose
安装
## github.com 可能访问超时,可以使用下面的获取下载下来后上传服务器即可
# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# curl -k "https://dl.cactifans.com/zabbix_docker/docker-compose" -o /usr/bin/docker-compose
# chmod a+x /usr/bin/docker-compose
2. 查看 docker-compose
版本
# docker-compose version
三、挂载公有云 NAS
1. 挂载华为云 SFS Turbo
此处
NAS
服务,使用华为云提供的SFS Turbo
,也可以是 阿里云 腾讯云 等对应服务
# mkdir /data
# mount -t nfs -o vers=3,timeo=600,noresvport,nolock 10.1.1.108:/ /data
10.0.0.1
和10.0.0.2
主机均执行
2. 后续需要考虑写入 /etc/fstab
文件,设置为开机自动挂载 NAS
# cat /etc/fstab
......
10.0.0.100:/ /data nfs vers=3,timeo=600,noresvport,nolock 0 0
四、部署临时单机 harbor
10.0.0.1
或10.0.0.2
主机执行
1. 下载 harbor
2.2.1
在线部署版本
# cd /opt/
# wget https://github.com/goharbor/harbor/releases/download/v2.2.1/harbor-online-installer-v2.2.1.tgz
2. 部署单机 harbor
a | 解压文件
# tar xf harbor-online-installer-v2.2.1.tgz
# cd /opt/harbor
# cp harbor.yml.tmpl harbor.yml
b | 创建 harbor
数据存储
$ mkdir /data/harbor
c | 添加域名证书,需要自己有域名 SSL证书
# mkdir /data/harbor/cert
## 把SSL证书公钥和私钥上传到 /data/harbor/cert 目录中
# scp evescn.pem root@10.0.0.1:/data/harbor/cert/
# scp evescn.key root@10.0.0.1:/data/harbor/cert/
# cd /data/harbor/cert/
# ln -sv edocyun.com.cn.key server.key
# ln -sv edocyun.com.cn.pem server.pem
d | 配置 harbor.yml
文件
# vim harbor.yml
## 需要修改如下内容,其他保持默认即可
5c5
< hostname: harbor.evescn.com
17,18c17,18
< certificate: /data/harbor/cert/server.pem
< private_key: /data/harbor/cert/server.key
29c29
< external_url: https://harbor.evescn.com
47c47
< data_volume: /data/harbor
e | 生成配置文件
# cd /opt/harbor
## harbor开启helm charts 和 镜像漏洞扫描
# ./prepare --with-notary --with-trivy --with-chartmuseum
f | 安装
# ./install.sh --with-notary --with-trivy --with-chartmuseum
h | 查看服务
$ docker-compose ps
五、单独部署 Harbor
数据库 PostgreSQL
和 Redis
10.0.0.3
主机执行
1. 创建 postgresql
和 redis
存储目录
# mkdir -p /data/harbor/{harbor-redis,harbor-postgresql}
## 修改所属组
# chown -R 999.999 /data/harbor/harbor-redis /data/harbor/harbor-postgresql
2. 创建 postgresql
和 redis
docker-compose.yml
文件
此处
redis
未设置密码,如需设置redis
密码,可以部署完成redis
后,复制redis
配置文件到宿主机目录,修改配置文件启用认证,再配置volumes
覆盖redis
容器配置文件
# vim docker-compose.yml
version: '2.3'
services:
redis:
image: goharbor/redis-photon:v2.2.1
container_name: harbor-redis
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/harbor/harbor-redis:/var/lib/redis
networks:
- harbor-db
ports:
- 6379:6379
postgresql:
image: goharbor/harbor-db:v2.2.1
container_name: harbor-postgresql
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: test2021
volumes:
- /data/harbor/harbor-postgresql:/var/lib/postgresql/data:z
networks:
- harbor-db
ports:
- 5432:5432
networks:
harbor-db:
driver: bridge
3. 部署 postgresql
和 redis
$ docker-compose up -d
4. 导入 postgresql
数据
部署临时单机
harbor
主机节点执行10.0.0.1
主机
$ 10.0.0.1 主机
## 进入临时 harbor-db 容器导出相关表及数据
# docker exec -it -u postgres harbor-db bash
## 导出数据
# pg_dump -U postgres registry > /tmp/registry.sql
# pg_dump -U postgres notarysigner > /tmp/notarysigner.sql
# pg_dump -U postgres notaryserver > /tmp/notaryserver.sql
## 将数据导入单独部署的PostgreSQL数据库
# psql -h 10.0.0.3 -U postgres registry -W < /tmp/registry.sql
# psql -h 10.0.0.3 -U postgres notarysigner -W < /tmp/notarysigner.sql
# psql -h 10.0.0.3 -U postgres notaryserver -W < /tmp/notaryserver.sql
六、部署高可用 harbor
集群
1. 清理 harbor
数据和配置文件
部署临时单机
harbor
主机节点执行10.0.0.1
主机
## 停止服务
# cd /opt/harbor/
# docker-compose down
# cd /root/
## 初始化清理 NAS 空间等
# cp -a /data/harbor/cert /root/
# rm -rf /data/harbor/*
# rm -rf /opt/harbor
# cp -a /root/cert /data/harbor/
2. 重新创建配置文件
# cd /opt/
# tar xf harbor-online-installer-v2.2.1.tgz
# cd /opt/harbor
## 修改配置文件,连接单独部署postgres和redis,注释harbor自带的postgres和redis
# cp harbor.yml.tmpl harbor.yml
# vim harbor.yml
5c5
< hostname: harbor.evescn.com
17,18c17,18
< certificate: /data/harbor/cert/server.pem
< private_key: /data/harbor/cert/server.key
29c29
< external_url: https://harbor.evescn.com
47c47
data_volume: /data/harbor
135,158c135,158
< external_database:
< harbor:
< host: 192.168.10.10
< port: 5432
< db_name: registry
< username: postgres
< password: test2021
< ssl_mode: disable
< max_idle_conns: 50
< max_open_conns: 1000
< notary_signer:
< host: 10.0.0.3
< port: 5432
< db_name: notarysigner
< username: postgres
< password: test2021
< ssl_mode: disable
< notary_server:
< host: 10.0.0.3
< port: 5432
< db_name: notaryserver
< username: postgres
< password: test2021
< ssl_mode: disable
161,175c161,175
< external_redis:
< # support redis, redis+sentinel
< # host for redis: <host_redis>:<port_redis>
< # host for redis+sentinel:
< # <host_sentinel1>:<port_sentinel1>,<host_sentinel2>:<port_sentinel2>,<host_sentinel3>:<port_sentinel3>
< host: 10.0.0.3:6379
< password:
< # sentinel_master_set must be set to support redis+sentinel
< #sentinel_master_set:
< # db_index 0 is for core, it's unchangeable
< registry_db_index: 1
< jobservice_db_index: 2
< chartmuseum_db_index: 3
< trivy_db_index: 5
< idle_timeout_seconds: 30
3. 负责文件到高可用其他节点
## 拷贝配置到 10.0.0.2 机器上
# scp -r /opt/harbor 192.168.10.11:/opt/
4. 部署第一个节点 harbor
10.0.0.1
# cd /opt/harbor
## harbor开启helm charts 和 镜像漏洞扫描
# ./prepare --with-notary --with-trivy --with-chartmuseum
## 安装
# ./install.sh --with-notary --with-trivy --with-chartmuseum
## 查看
# docker-compose ps
5. 部署第二个节点 harbor
10.0.0.2
$ cd /opt/harbor
# harbor开启helm charts 和 镜像漏洞扫描
$ ./prepare --with-notary --with-trivy --with-chartmuseum
# 安装
$ ./install.sh --with-notary --with-trivy --with-chartmuseum
# 查看
$ docker-compose ps
6. 配置华为云 SLB
具体配置,请查看官方文档即可
参考文档
https://cloud.tencent.com/developer/article/1838838