快速说明版:

  1. 升级 Docker 到最新版,19.x 版本的 Docker 在 Harbor 升级数据库时迁移数据会失败
  2. 需要先升级到 Harbor 2.0.0,因为 2.3.0 不支持直接从 1.9.x 版本升级
  3. 然后升级到 Harbor 2.3.0,从这个版本开始 postgresql 数据库从 9.6 升级到了 13.3
  4. 最后后升级到 Harbor 2.8.0 或更新版本

详细步骤

基础系统: CentOS 7.x
基础 Docker 版本:19.03.9
原 Harbor 版本 1.9.3

备份旧版

旧版安装目录位于 /home/harbor,数据目录位于 /home/harbor_data

  • 停止旧版容器组:cd /home/harbor && docker-compose down
  • 备份 Harbor 配置:mv /home/harbor /home/harbor.1.9.3
  • 备份数据库目录:cp -Rpf /home/harbor_data/database /home/harbor_data/1.9.3_database

升级 docker 版本

这一步非常重要!19.03.9 版本的 docker 在升级 Harbor 时数据库迁移会失败!

  • 删除旧版 docker:
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
  • 引入 docker 仓库配置:
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安装 docker:
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

升级 Harbor 到 v2.0.0

Harbor 1.9.3 不能直接升级到 2.3.0,需要先升级到 1.10.0 或 2.0.0。我们直接升级到 2.0.0。

  • 下载离线安装包:
cd /home
wget https://github.com/goharbor/harbor/releases/download/v2.0.0/harbor-offline-installer-v2.0.0.tgz
tar zxf harbor-offline-installer-v2.0.0.tgz
  • 导入镜像:
cd /home/harbor
docker image load -i harbor.v2.0.0.tar.gz
  • 引入旧版配置文件:cp /home/harbor.1.9.3/harbor.yml /home/harbor/
  • 根据旧版配置生成当前版本配置文件:
docker run -it --rm -v /:/hostfs goharbor/prepare:v2.0.0 migrate -i /home/harbor/harbor.yml
  • 执行安装脚本
./install.sh
  • 确认安装正确且数据正确
  • 停止容器组:docker-compose down
  • 备份 Harbor 配置:mv /home/harbor /home/harbor.2.0.0
  • 备份数据库:cp -Rpf /home/harbor_data/database /home/harbor_data/2.0.0_database

升级 Harbor 到 v2.3.0

这一升级过程会将 PostgreSql 数据库从 9.6 升级到版本 13。

  • 下载离线安装包:
cd /home
wget https://github.com/goharbor/harbor/releases/download/v2.3.0/harbor-offline-installer-v2.3.0.tgz
tar zxf harbor-offline-installer-v2.3.0.tgz
  • 导入镜像:
cd /home/harbor
docker image load -i harbor.v2.3.0.tar.gz
  • 引入旧版配置文件:cp /home/harbor.2.0.0/harbor.yml /home/harbor/
  • 根据旧版配置生成当前版本配置文件:
docker run -it --rm -v /:/hostfs goharbor/prepare:v2.3.0 migrate -i /home/harbor/harbor.yml
  • 执行安装脚本
./install.sh
  • 确认安装正确且数据正确
  • 停止容器组:docker-compose down
  • 备份 Harbor 配置:mv /home/harbor /home/harbor.2.3.0
  • 备份数据库:cp -Rpf /home/harbor_data/database /home/harbor_data/2.3.0_database

升级 Harbor 到 v2.8.2

  • 下载离线安装包:
cd /home
wget https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
tar zxf harbor-offline-installer-v2.8.2.tgz
  • 导入镜像:
cd /home/harbor
docker image load -i harbor.v2.8.2.tar.gz
  • 引入旧版配置文件:cp /home/harbor.2.3.0/harbor.yml /home/harbor/
  • 根据旧版配置生成当前版本配置文件:
docker run -it --rm -v /:/hostfs goharbor/prepare:v2.8.2 migrate -i /home/harbor/harbor.yml
  • 执行安装脚本
./install.sh
  • 确认安装正确且数据正确

出现问题时回退版本

假如 Harbor 升级过程中出现问题,我们可以通过以下步骤回退到上一个版本状态,例如从 2.0.0 回退到 1.9.3:

cd /home/harbor
docker-compose down

cd /home/harbor_data
rm -f redis/*
rm -rf database
cp -Rpf 1.9.3_database database

cd /home
mv harbor harbor.2.0.0
mv harbor.1.9.3 harbor
cd harbor
docker-compose up -d

在 CentOS 8 上的问题和解决

我们的生产服使用的是 CentOS 8,在这上面碰到的问题和 CentOS 7.x 上的又有区别。

更新 Yum 仓库

首先是 Yum 不能正常工作,因为 CentOS 8(非 Stream 版)已提前进入 EOL 停止服务阶段,因此镜像已被官方移动。

参考 清华大学开源软件镜像站 的说明,修改 repo 设置,不过我们这里做了一点修改以适应 8-stream 版本:

sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos|g' \
		 -e 's|/$releasever|/8-stream|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo

然后执行

yum clean all
yum makecache -v

升级 Docker

yum install -y libseccomp-devel

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -v --allowerasing

systemctl enable docker
systemctl start docker