centos7安装harbor并使用nginx的proxy_next_upstream提高可用性
192.168.10.159 harbor-nginx
192.168.10.160 harbor01
192.168.10.161 harbor02
在harbor01和02上执行以下操作
# 安装docker 19.03.5
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
service docker start
# 安装docker-compose 1.24.1
yum install python-pip python-devel –y
cd /opt
# 配置阿里云加速
mkdir ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
cat >requirements.txt <<EOF
backports.ssl-match-hostname==3.5.0.1
bcrypt==3.1.7
cached-property==1.5.1
certifi==2019.9.11
cffi==1.13.2
chardet==3.0.4
Cheetah==2.4.4
configobj==4.7.2
cryptography==2.8
decorator==3.4.0
docker==3.7.3
docker-compose==1.24.1
docker-pycreds==0.4.0
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6
functools32==3.2.3.post2
idna==2.7
iniparse==0.4
ipaddress==1.0.16
IPy==0.75
Jinja2==2.9.6
jsonpatch==1.16
jsonpointer==1.12
jsonschema==2.6.0
kitchen==1.1.1
Markdown==2.6.9
MarkupSafe==1.0
oauth==1.0.1
paramiko==2.6.0
perf==0.1
policycoreutils-default-encoding==0.1
prettytable==0.7.2
pycparser==2.19
pycurl==7.19.0
pygobject==3.22.0
pygpgme==0.3
pyliblzma==0.5.3
PyNaCl==1.3.0
python-linux-procfs==0.4.9
pytoml==0.1.14
pyudev==0.15
pyxattr==0.5.1
PyYAML==3.13
requests==2.20.1
schedutils==0.4
seobject==0.1
sepolicy==1.1
six==1.13.0
slip==0.4.0
slip.dbus==0.4.0
texttable==0.9.1
urlgrabber==3.10
urllib3==1.24.3
websocket-client==0.56.0
yum-metadata-parser==1.1.4
EOF
pip install -r requirements.txt
pip install docker-compose
下载harbor1.10.0
wget https://storage.googleapis.com/harbor-releases/release-1.10.0/harbor-offline-installer-v1.10.0.tgz
# 解压harbor-offline-installer-v1.10.0.tgz
tar xvf harbor-offline-installer-v1.10.0.tgz
# 修改配置文件harbor.yml 将hostname 改为自己的ip 并修改密码 其余不变(如果有自己的ssl证书那就修改证书路径 我是注释掉了443的配置)
cd harbor
# 安装harbor
./install.sh
# 安装完成
登陆http://192.168.10.160和http://192.168.10.161
删除两边的lib
在192.168.10.159上安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
service docker start
下载nginx镜像1.12
docker pull nginx:1.12
创建文件夹/opt/nginx
mkdir –p /opt/nginx
创建nginx配置文件nginx.conf
cat >/opt/nginx/nginx.conf<<EOF
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream hub{
server 192.168.10.160:80;
}
server {
listen 80;
proxy_pass hub;
proxy_timeout 300s;
proxy_connect_timeout 5s;
}
}
EOF
创建容器启动脚本restart.sh
cat > /opt/nginx/restart.sh <<EOF
#!/bin/bash
docker stop harbornginx
docker rm harbornginx
docker run -idt --net=host --name harbornginx -v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.12
EOF
启动nginx容器
sh /opt/nginx/restart.sh
访问http://192.168.10.159
在192.168.10.159上打tag
docker tag nginx:1.12 harbor.pdabc.com/kubernetes/nginx:1.2
修改/etc/hosts增加
192.168.10.159 harbor.pdabc.com
修改/etc/docker/daemon.json
cat >/etc/docker/daemon.json <<EOF
{
"insecure-registries": ["harbor.pdabc.com"]
}
EOF
重启docker使配置生效
systemctl daemon-reload
service docker restart
重启之后确保容器已经启动 尤其是nginx这些
登录192.168.10.160
创建项目kubernetes
添加成员pusher 密码为[email protected]
登录harbor.pdabc.com 并输入pusher的账号密码 pusher/[email protected]
docker login harbor.pdabc.com
push 镜像
docker push harbor.pdabc.com/kubernetes/nginx:1.2
在其余服务器上pull镜像尝试 也需要设置/etc/hosts 和/etc/docker/daemon.json
docker pull harbor.pdabc.com/kubernetes/nginx:1.2
在192.168.10.160上仓库管理>新建目标
输入用户名密码 地址等信息
测试连接并保存
新建同步规则 如下 选择事件驱动
定时任务也可以
pull请求也设置一个 这个不能时间驱动在本机上设置定时任务我这里设置10分钟触发一次
在161上也设置相同的规则
push一个镜像测试
docker tag nginx:1.12 harbor.pdabc.com/kubernetes/nginx:1.12
docker push harbor.pdabc.com/kubernetes/nginx:1.12
两边都有了
打算用nginx 改造一下,实现高可用,也可能只是本菜鸡画蛇添足罢了. 关闭docker 启动的nginx 并安装一个1.14版本的nginx 使用如下配置文件
user root; pid /var/run/nginx.pid; worker_processes 1; worker_rlimit_nofile 100000; events { worker_connections 2048; multi_accept on; use epoll; }
http { log_format access_json '{ "@timestamp": "$time_iso8601", ' '"time": "$time_iso8601", ' '"remote_addr": "$remote_addr", ' '"remote_user": "$remote_user", ' '"body_bytes_sent": "$body_bytes_sent", ' '"request_time": "$request_time", ' '"status": "$status", ' '"host": "$host", ' '"request": "$request", ' '"request_method": "$request_method", ' '"uri": "$uri", ' '"http_referrer": "$http_referer", ' '"body_bytes_sent":"$body_bytes_sent", ' '"http_x_forwarded_for": "$http_x_forwarded_for", ' '"http_user_agent": "$http_user_agent" ' '}'; access_log /var/log/nginx/access.log access_json; error_log /var/log/nginx/error.log; upstream harbor { ip_hash; server 192.168.10.160:80 weight=1 max_fails=3 fail_timeout=30s; server 192.168.10.161:80 weight=1 max_fails=3 fail_timeout=30s; } server { listen 80; server_name localhost;
location / { proxy_next_upstream http_500 http_502 http_503 http_504 ; proxy_redirect off; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://harbor;
}
}
} |
nginx proxy_next_upstream 可以参考下面博客 自己没整理
https://www.cnblogs.com/kevingrace/p/8185218.html
这里不用ip hash的话会报下面2张图的错 一定要用ip hash哦
在160上创建一个tag 已区分转发的时候转到哪一台.
开启160的防火墙 模拟故障发生 159 不能访问160的80
前3次访问 都是返回502
累计三次之后 转发到161了 此时160其实还是不能服务的.
完成测试~