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.110.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.110.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 数据库 PostgreSQLRedis

10.0.0.3 主机执行

1. 创建 postgresqlredis 存储目录

# mkdir -p /data/harbor/{harbor-redis,harbor-postgresql}

## 修改所属组
# chown -R 999.999 /data/harbor/harbor-redis /data/harbor/harbor-postgresql

2. 创建 postgresqlredis 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. 部署 postgresqlredis

$ 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
posted @ 2022-04-21 20:03  evescn  阅读(788)  评论(0编辑  收藏  举报