ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

K8S实战Day5-Harbor仓库搭建与双组复制高可用

2020-12-28 15:02:54  阅读:237  来源: 互联网

标签:双组 compose hub Harbor Day5 nginx harbor docker


K8S实战Day5-Harbor仓库搭建

前言

docker hub涉及网络及安全的问题,实际使用不方便,我们更需要使用Harbor搭建一个私有仓库。
但由于自己使用云主机,只能配置外网访问Harbor,所以不属于Harbor的典型使用场景

Harbor简介

优点:

本身自代 docker 私有仓库
支持基于角色的权限管理
支持 LDAP

Harbor的Git地址

Harbor安装

1.镜像包下载

Harbor支持2种安装方式:Helm安装,本地安装
由于Docker网络的不可控,我们选择本地安装
为了做简单高可用,我们选择2台Worker节点安装Harbor

Harbor下载地址

我们本次选择的版本是v1.7.1

wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz

下载完成后解压并ls

tar xvf harbor-offline-installer-v1.7.1.tgz
cd harbor
[root@s1 harbor]# ls
common                          docker-compose.notary.yml  harbor.v1.7.1.tar.gz  open_source_license
docker-compose.chartmuseum.yml  docker-compose.yml         install.sh            prepare
docker-compose.clair.yml        harbor.cfg                 LICENSE

其中harbor.v1.7.1.tar.gz 里就是 Harbor 用到的镜像

2.配置文件

harbor.cfg 是这个项目的配置文件

hostname = 192.168.8.180   #hostname改为该节点IP地址,由于要做高可用配置,不配置域名,选择IP地址
harbor_admin_password = Harbor12345   #没有修改,保持默认

docker-compose.yml是更重要的配置文件
cat以后可以看到里面很多Volume都会挂在到/data目录下
最好把/data用软链接挂在到空间最大的磁盘

ln -s /data

我自己的根目录磁盘最大,所以不进行操作

此时安装会提示需要自己安装docker-compose
于是我们下载好docker-compose-Linux-x86_64-1.22,导入并赋予root权限

[root@s1 harbor]# mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
[root@s1 harbor]# chmod +x /usr/local/bin/docker-compose

可以用docker-compose --version看看是否安装完成

然后安装harbor:

./install.sh
✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://192.168.8.180. 
For more details, please visit https://github.com/goharbor/harbor

此时用主机登陆http://外网IP就可以进入Harbor的管理界面了

2.部署nginx

在Master节点192.168.8.170的根目录创建nginx文件夹

然后按照
阿里云镜像加速
配置镜像加速

拉取nginx镜像

[root@m1 nginx]# docker pull nginx

进入nginx配置

vi nginx.conf
user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;  #错误日志地址

pid /var/run/nginx.pid;  #配置PID

events {

	worker_connections 1024; #worker最大连接数
}

stream {

	upstream hub {
		server hub.hy1089.com;  #服务地址,如果出问题随时切换
	}
	server {
		listen 80; 
		proxy_pass hub;
		proxy_timeout 300s;
		proxy_connect_timeout 5s;
	}
}

编写nginx启动脚本:

vi restart.sh
#!/bin/bash

docker stop harbornginx

docker rm harbornginx

docker run -idt --net=host --name harbornginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.19.6
[root@m1 nginx]# sh restart.sh
harbornginx
harbornginx
b56b2e1996071e13f4051bed2e3aaaf8eb04dc0a1e767a790cf689f51c7ec635

查看日志

docker logs b56 

执行nginx启动脚本,如果第一次不成功就在执行

[root@m1 nginx]# sh restart.sh

启动后发现登陆2个harbor地址不通了,果断在2个节点重新安装Harbor服务

[root@s1 harbor]# sh install.sh

然后就可以访问了,虽然我们配置的Harbor是内网地址,但远程访问要输入外网IP
可以在访问主机配置域名访问:

vi /etc/hosts

我们这里配置域名为:hub.hy1089.com

用admin/Harbor12345登陆
新建一个名为kubernetes的项目,访问级别为公开

尝试push镜像:

docker images | grep nginx
docker tag nginx:1.13.12 hub.hy1089.com/kubernetes/nginx:1.13.12
docker push hub.hy1089.com/kubernetes/nginx:1.13.12

此时提示443refused
我们需要对dockers进行配置:

vi /etc/docker/daemon.json

添加:

"insecure-registries":["hub.hy1089.com"]

这里注意最后一行不加逗号,其他行都要加逗号

service docker restart
sh restart.sh

此时push会失败,被deny,这是因为还没有以用户身份登陆Harbor
我们在dockers管理页面中新建用户,我们这里配置

  • 用户名:pusher
  • 全名:pusher

然后在kubernetes项目中添加用户pusher,角色开发人员

docker login hub.hy1089.com
User Login:pusher
Password:xxxxxxxx
docker push hub.hy1089.com/kubernetes/nginx:1.13.12

OK。
登陆另一台机器,比如s2,同样做http访问配置,dockers login

docker pull hub.hy1089.com/kubernetes/nginx:1.13.12

OK

3.配置Harbor的高可用(双组复制)

  1. 新建目标(仓库管理-新建):
    目标名:s2
    url:http://192.168.8.181
    用户名:admin
    密码:Harbor12345
    远程验证:√
    连接测试:√

  2. 新建规则:
    登陆S1的Harbor管理页面,进入kubernetes项目
    点击“复制”,新建规则
    名称:cp_to_s2
    目标:http://192.168.8.181
    触发模式:即刻

  3. 在S2的Harbor做相同配置

此时进入项目管理可以看到同步日志

总结

这里的nginx.conf配置一定要细心,不要有错误,不然可能会出现未知问题,我就是因为反复填错导致一堆端口占用最后只能从快照恢复了。

标签:双组,compose,hub,Harbor,Day5,nginx,harbor,docker
来源: https://blog.csdn.net/weixin_47315354/article/details/111544183

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有