部署docker-consul群集,Harbor构建Docker私有仓库

部署docker-consul群集,Harbor构建Docker私有仓库

了解Harvor

  • Harbor是VMware公司开源的企业级Docker Registry项目
  • Harbor的优势
    ●基于角色控制
    ●基于镜像的复制策略
    ●支持LDAPIAD
    ●图像删除和垃圾收集
    ●图形U
    ●审计
    ●RESTful API

案例概述

  • 最近创鑫公司又提出一个新需求,将项目全部打包成镜
    像部署私有仓库服务,经过几轮商讨,最终选择
    Docker Harbor
  • Docker Harbor有可视化的Web管理界面,可以方便
    管理Docker镜像,又提供了多个项目的镜像权限管理
    及控制功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DilhgksE-1601048267012)(../AppData/Roaming/Typora/typora-user-images/image-20200924114901868.png)]

了解基础名称

Proxy
●通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务

Registry
●负责储存Docker镜像,并处理docker push/pull命令
Core services
●Harbor的核心功能,包括UI、webhook、token服务
Database
●为core services提供数据库服务
Log collector
●负责收集其他组件的log,供日后进行分析

Harbor可选参数
●电子邮件设置、harbour_admin_password、auth_mode
●self_registration、token_expiration
●oproject_creation_restriction、verify_remote_cert
启动并安装Harbor

Docker consul服务了解

Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能:

  • 服务发现: Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。
  • 健康检查: Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。
  • 键值存储: 应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP API可以很容易的使用这个组件。
  • 多数据中心: Consul对多数据中心有非常好的支持,这意味着Consul用户不必担心由于创建更多抽象层而产生的多个区域。

容器跟新拓扑图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zpbnBP9-1601048267015)(../AppData/Roaming/Typora/typora-user-images/image-20200924113039172.png)]

需要一下服务

  • Consul-Template是一个守护进程,用于实时查询Consu集群信息
  • docker-compose非常适合组合使用多个容器进行开发的场景
  • Docker consul容器服务更新与发现
  • Gliderlabs/Registrator可以检查容器运行状态自动注册,还可以注销

案例需要

  • 实现单机网络下容器与容器之间互通

  • 使用Docker compose创建容器

  • 搭建Consul服务实现自动发现和更新

部署Harbor服务过程

以下服务都是在有docker的前提下部署的!!!
安装docker-compose

[root@localhost ~]# chmod +x docker-compose 

系统可以识别

 mv docker-compose /usr/local/bin/

查看是否安装

[root@localhost ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3

安装harbor

[root@localhost ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

修改配置文件

[root@localhost ~]# cd /usr/local/harbor/ 
[root@localhost harbor]# vim harbor.cfg 
 5 hostname = 192.168.136.81

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vnQmkZcD-1601048267017)(../AppData/Roaming/Typora/typora-user-images/image-20200924120918776.png)]

开启Harbor

[root@localhost harbor]# sh install.sh 

输入地址查看

密码Harbor12345默认

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qFCacstW-1601048267021)(../AppData/Roaming/Typora/typora-user-images/image-20200924121312522.png)]

添加项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRcobUXq-1601048267026)(../AppData/Roaming/Typora/typora-user-images/image-20200924121423072.png)]

打开kgc没有创建镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ArvlZLOI-1601048267027)(../AppData/Roaming/Typora/typora-user-images/image-20200924121518938.png)]

添加镜像仓库

登录
[root@localhost harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1

下载镜像
[root@localhost harbor]# docker pull nginx

打标签
上传镜像到Harbor
[root@localhost harbor]# docker tag  nginx:latest  127.0.0.1/kgc/nginx:v1

上传镜像
[root@localhost harbor]# docker push 127.0.0.1/kgc/nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jCcbePSD-1601048267029)(../AppData/Roaming/Typora/typora-user-images/image-20200924121859920.png)]

不是本地上传镜像操作

在开启一台服务端192.168.136.30

[root@localhost ~]# docker login -u admin -p Harbor12345 http://192.168.136.81
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.136.81/v2/: dial tcp 192.168.136.81:443: connect: connection refuse

以上操作拒绝是因为交互默认使用HTPS但是私有默认使用的是HTTP服务

解决方法(下面都指向对方地址)

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service 
14 ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.136.81

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JZJFccYY-1601048267032)(../AppData/Roaming/Typora/typora-user-images/image-20200924122236703.png)]

重启服务

[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl restart docker
登录到Harbor
docker login -u admin -p Harbor12345 http://192.168.136.81

下载centos:7
[root@localhost ~]# docker pull centos:7

标签
[root@localhost ~]# docker tag centos:7 192.168.136.81/kgc/centos7:v1

上传镜像
[root@localhost ~]# docker push 192.168.136.81/kgc/centos7

游览器查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HeeLbXja-1601048267034)(../AppData/Roaming/Typora/typora-user-images/image-20200924122715390.png)]

在用户端操作

退出和登录

[root@localhost ~]# docker logout 192.168.136.81
[root@localhost ~]# docker login 192.168.136.81

移除Harbor所有容器清除

[root@localhost ~]# cd /usr/local/harbor/
[root@localhost ~]# docker-compose down -v

部署Docker consul群集实验过程

实验前提2台服务器

服务端:192.168.136.81 需要配置软件:Docker,docker-compose Docker consul

服务端:192.168.136.30 需要配置软件:Docker,Gliderlabs/Registrator,consul-template

实验目的:

安装部署docker-compose

在192.168.136.81中配置docker-compose非常适合组合使用多个容器进行开发的场景

导入docker-compose 模板

[root@localhost ~]# chmod +x docker-compose 

让系统识别

[root@localhost ~]# mv docker-compose /usr/local/bin/

配置Docker consul服务

Docker consul容器服务更新与发现

[root@localhost ~]# mkdir consul
[root@localhost ~]# cd consul/

解压consul服务包

[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip 

让系统识别

[root@localhost consul]# mv consul /usr/bin/

配置服务软件

[root@localhost consul]# consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.136.81 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

解释

[root@localhost consul]# consul agent \  安装agnt
-server \     安装server
-bootstrap \ 选举
-ui \     网页查看
-data-dir=/var/lib/consul-data \  数据存放位置
-bind=192.168.136.81 \     绑定自己地址
-client=0.0.0.0 \     监听地址
-node=consul-server01 &> /var/log/consul.log &    在本地定义名称

查看群集信息

[root@localhost consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
[root@localhost consul]# consul info | grep leader
	leader = true
	leader_addr = 192.168.136.81:8300

通过httpd api 获取群集信息

curl 127.0.0.1:8500/v1/status/peers

群集Raf leader

 curl 127.0.0.1:8500/v1/status/leader

查看服务

[root@localhost consul]# curl 127.0.01:8500/v1/catalog/services

群集节点信息信息

[root@localhost consul]# curl 127.0.01:8500/v1/catalog/nodes

打开游览器查看节点管理页面

输入地址192.168.136.81:8500

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0nHVhCcy-1601048267036)(../AppData/Roaming/Typora/typora-user-images/image-20200924104934364.png)]

安装Gliderlabs/Registrator

在192.168.136.30容器安装Gliderlabs/Registrator

可以检查容器运行状态自动注册,还可以注销

[root@localhost consul]# docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.136.30 \
consul://192.168.136.81:8500

解释

[root@localhost consul]# docker run -d \  以容器运行registrator
--name=registrator \    名称
 --net=host \         仅主机
-v /var/run/docker.sock:/tmp/docker.sock \  建立数据卷
--restart=always \                重启策略
gliderlabs/registrator:latest \  下载镜像
-ip=192.168.136.30 \      自己的ip
consul://192.168.136.81:8500    指向服务ip

测试服务发现是否功能正常

docker run -itd -p:83:80 --name test-01 -h test01 nginx

docker run -itd -p:84:80 --name test-02 -h test02 nginx

[root@localhost ~]# docker run -itd -p:88:80 --name test-03 -h test03 httpd

[root@localhost ~]# docker run -itd -p:89:80 --name test-04 -h test04 httpd

验证httpd和nginx服务是否注册到consul

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oa2A4TdY-1601048267037)(../AppData/Roaming/Typora/typora-user-images/image-20200924104704848.png)]

在consul服务端查看服务

[root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services
{"consul":[],"httpd":[],"nginx":[]}[root@localhost consul]# 

安装consul-template

Consul-Template是一个守护进程,用于实时查询Consu集群信息,
并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,
可以选择运行shell命令执行更新操作,重新加载Nginx。Consul-Template
可以查询Consul中的服务目录、Key.Key-values等。
这种强大的抽象功能和查询语言模板可以使Consul-Template特别适合动态的创建配置文件。
例如∶创建Apache/Nginx Proxy Balancers、Haproxy Backends

准备template nginx模板

[root@localhost consul]# vim nginx.ctmpl 

upstream http_backend {
  {{range service "nginx"}}
  server {{.Address}}:{{.Port}};
  {{end}}
}

server {
  listen 83;
  server_name localhost 192.168.136.81;  
  access_log /var/log/nginx/kgc.cn-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
   }
}

编译安装nginx

yum install -y gcc gcc-c++ pcre-devel zlib-devel 
cd /opt
tar zxvf nginx-1.12.0.tar.gz 
cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
[root@localhost nginx-1.12.0]# make && make install

修改配置文件

[root@localhost conf]# cd /usr/local/nginx/conf/
 18     include       mime.types; 
 19     include       vhost/*conf;  添加
 20     default_type  application/octet-stream;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BVJEqgNb-1601048267040)(C:\Users\19437\AppData\Roaming\Typora\typora-user-images\image-20200924011005179.png)]

创建vhost目录和日志

[root@localhost conf]# mkdir /usr/local/nginx/conf/vhost
[root@localhost conf]# mkdir  /var/log/nginx

开启服务

[root@localhost conf]# /usr/local/nginx/sbin/nginx

查看不到83端口号,因为没有配置template

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8pGaR06A-1601048267044)(../AppData/Roaming/Typora/typora-user-images/image-20200924111956495.png)]

配置开启template

template是跟新模板信息

配置生成文件

[root@localhost conf]# cd /root/consul/
[root@localhost consul]# unzip consul-template_0.19.3_linux_amd64_\(1\).zip 

让系统可以识别

[root@localhost consul]# mv consul-template /usr/local/bin/

配置监控(保持一直监控状态)

consul-template -consul-addr 192.168.136.81:8500 \
-template 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5bDvfr2c-1601048267045)(../AppData/Roaming/Typora/typora-user-images/image-20200924112427081.png)]

重启开启终端查看配文件查看是否生成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xmxlBXqA-1601048267047)(../AppData/Roaming/Typora/typora-user-images/image-20200924104216448.png)]

查看日志

刷新网页192.168.136.81:83在192.168.136.30中查看日志,可以看到端口可以访问

[root@localhost ~]# docker logs -f test-01
[root@localhost ~]# docker logs -f test-02

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeQLN7tw-1601048267049)(../AppData/Roaming/Typora/typora-user-images/image-20200924102229810.png)]

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页