1、安装方式
harbor有两种安装方式,一种是用docker-compose启动官方打包好的离线安装包; 二是用helm chart的形式在k8s上来运行harbor。经过我们自己的实践,helm chart安装失败了所以我们选择了第一种方法离线安装。而且你的harbor如果是安装在k8s上的话,就会有一种很微妙的关系,k8s的镜像是从harbor中拉取的,harbor又是搭载在k8s上的一旦其中一个出现问题,就会导致另外一个也出现问题。
2、前期准备
我们准备了一台最小版的centos7.6服务器,开始安装所需要的docker,docker-compose等。
①centos环境准备
#关闭防火墙: 或者阿里云开通安全组端口访问
systemctl stop firewalld
systemctl disable firewalld
#关闭 selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#关闭 swap:
swapoff -a #临时
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
#将桥接的 IPv4 流量传递到 iptables 的链:
# 修改 /etc/sysctl.conf
# 如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
# 可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
# 执行命令以应用
sysctl -p
②安装docker:
#1、安装docker
##1.1、卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
##1.2、安装基础依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
##1.3、配置docker yum源
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##1.4、安装并启动 docker
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl start docker
##1.5、配置docker加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://t1gbabbr.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
③安装python环境
yum install python-setuptools gcc python-devel -y
④安装openssl,我这里自带了,就没装。
⑤安装docker-compose
在docker-compose的官网找到linux的安装教程如下:
运行如下命令下载并安装当前稳定版本的 Docker-compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看安装好后的版本
docker-compose --version
3、开始安装
①下载安装包
首先我重新启动了
一台服务器用来安装harbor
## 创建目录及下载harbor离线包
mkdir /data && cd /data
wget https://github.com/goharbor/harbor/releases/download/v2.2.0/harbor-offline-installer-v2.2.0.tgz
tar xf harbor-offline-installer-v2.2.0.tgz && rm harbor-offline-installer-v2.2.0.tgz
第一行命令创建data文件夹来存储harbor的所有目录文件,这个data仅供harbor使用。第二行下载harbor安装包,第三行解压,在解压完成过后,会询问你是否删除安装包输入y删除即可。
②修改配置
cd harbor
cp harbor.yml.tmpl harbor.yml
5 hostname: *********
17 certificate: /data/harbor/ssl/tls.cert
18 private_key: /data/harbor/ssl/tls.key
34 harbor_admin_password: *******
第一步我们进到harbor文件夹,复制harbor.yml.tmpl为harbor.yml,然后修改其中的配置。要修改配置的地方我都写出来了。hostname最好使用域名,但是要是没有域名也可以使用ip地址。一定要记住修改默认密码不然会有安全隐患。
③创建harbor访问域名证书
mkdir /data/harbor/ssl && cd /data/harbor/ssl
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=*********
第一步创建ssl文件夹用来存储证书,第二步生成key,最后一步使用生成的key自签证书。
days后面是你自签证书的有效时间可以自行修改。'CN='后面就写你自己的IP地址或者你自己的域名。
生成完成之后显示如下
故harbor.yml中certificate填写为如上tls.cert的文件目录地址:/data/harbor/ssl/tls.cert
故harbor.yml中private_key填写为如上tls.key的文件目录地址:/data/harbor/ssl/tls.key
④开始安装
第一步进到harbor文件夹下,然后就可以用以下命令开始安装。
./install.sh
出现以下界面,就说明你已经安装成功了!
⑤调试检测
第一步:输入以下命令检查组件是否运行。
docker-compose ps
全部状态都是healthy说明已经安装成功。
第二步:如果你的harbor网址是使用域名的话,那么在你的电脑上配置本地host,在C:\windows\System32\drivers\etc\hosts中添加你自己的域名。
格式为:harbor安装的服务器地址(空格)域名或者IP地址,这样配置过后就可以在网页中直接打开harbor页面
输入账号密码登录即可。
第三步:尝试上传镜像。首先在另外一台服务器上添加本地hosts
echo '10.0.1.204 harbor.boge.com' >> /etc/hosts
因为我们的证书是自签的是不受到其他机器信任的,所以我们要在我们要使用harbor的服务器上放上我们的证书,才能调度上面的pod,才能拉取镜像。使用下面的代码,在要使用harbor的服务器上保存证书,其中*的部分使用你自己的域名或者是IP地址。
mkdir -p /etc/docker/certs.d/*********
scp 10.0.1.204:/data/harbor/ssl/tls.cert /etc/docker/certs.d/***********/ca.crt
然后使用如下语句登录harbor,如果没有使用80端口一定要用IP地址加上你的端口号,冒号之后填端口号,查看自己harbor.yml里http或https里的端口详情。
docker login ********:******
然后尝试ping 你的网页看时候能够ping通。可以ping同就下一步。寻找一个镜像上传。
最后我们使用docker tag语句给本地镜像重命名。然后按照以下格式上传。其中星号部分是你的域名或者IP地址。注意注意注意!如果你没有使用80端口要在你的IP地址之后加上你的端口号不然会上传不上去。至于怎么查看你的端口,在你的harbor服务器的harbor文件夹下有我们之前的配置文件harbor.yml,打开在里面会有。如下图所示
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 *************:****/library/pause:3.1
第四步,当我们尝试docker login时,遇到了如下错误:
经反复搜资料得知,要在使用harbor的服务器(我们这里使用harbor的服务器是k8s的master节点,要上传镜像至harbor)上修改docker.service。
vim /usr/lib/systemd/system/docker.service
注释掉原本的这一段:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
添加如下的代码:
ExecStart=/usr/bin/dockerd --insecure-registry https://192.168.76.131:4430
修改完毕后显示如下
⑥登录成功
修改完毕后再次尝试登录,docker login harbor的ip+端口,如下就是登陆成功。
最后就是上传镜像,使用docker push如下
最后一步:检查镜像。 我们在harbor的library中检查我们的镜像是否上传成功。
可以看到上传成功!
至此Harbor的安装与测试就大功告成了!