1.如果docker主机是通过虚拟机安装的,则配置网络链接时需要选择桥接方式,使虚拟机在局域网环境下可以被访问到;
2.通过虚拟机安装两台centos7虚拟机,并安装好docker:
sudo yum instsll docker
sudo service docker start
sudo chkconfig docker on
3.关闭firewalld,启用iptables
关闭firewalld
sudo systemctl stop firewalld
sduo systemctl mask firewalld
并且安装iptables-services:
sudo yum install iptables-services
设置开机启动:
sudo systemctl enable iptables
手动操作iptablse命令:
sudo systemctl startiptables
保存到/etc/sysconfig/iptablse
sudo service iptables save
4.iptables配置
sudo vi /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Tue Nov 1 10:48:39 2016
*nat
:PREROUTING ACCEPT[27:11935]
:INPUT ACCEPT[0:0]
:OUTPUT ACCEPT[0:0]
:POSTROUTING ACCEPT[0:0]
:DOCKER- [0:0]
-A PREROUTING-m addrtype--dst-type LOCAL-j DOCKER
-A OUTPUT! -d127.0.0.0/8 -m addrtype--dst-type LOCAL-j DOCKER
-A POSTROUTING-s172.17.0.0/16 ! -o docker0-j MASQUERADE
COMMIT
#
*filter
:INPUT ACCEPT[0:0]
:FORWARD ACCEPT[0:0]
:OUTPUT ACCEPT[47:10966]
:DOCKER- [0:0]
-A FORWARD-o docker0-j DOCKER
-A FORWARD-o docker0-m conntrack--ctstate RELATED,ESTABLISHED-j ACCEPT
-A FORWARD-i docker0! -o docker0-j ACCEPT
-A FORWARD-i docker0-o docker0-j ACCEPT
-A INPUT-m state--state RELATED,ESTABLISHED-j ACCEPT
-A INPUT-p icmp-j ACCEPT
-A INPUT-i lo-j ACCEPT
-A INPUT-p tcp-m state--state NEW-m tcp--dport22 -j ACCEPT
-A INPUT-p tcp-m state--state NEW-m tcp--dport80 -j ACCEPT
-A INPUT-p tcp-m state--state NEW-m tcp--dport8080 -j ACCEPT
-A INPUT-p udp-m state--state NEW-m udp--dport500 -j ACCEPT
-A INPUT-p udp-m state--state NEW-m udp--dport4500 -j ACCEPT
-A INPUT-j REJECT--reject-with icmp-host-prohibited
-A FORWARD-j REJECT--reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Nov 1 10:48:39 2016
5.设置阿里云镜像服务
sudo cp-n/lib/systemd/system/docker.service/etc/systemd/system/docker.service
sudo sed-i"s|ExecStart=/usr/bin/docker-current daemon|ExecStart=/usr/bin/docker-current daemon --registry-mirror=https://8nq5bfai.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart
6.关闭SELinux
1)查看:sestatus
2)关闭:
临时关闭:setenforce 0
永久关闭:
vi /etc/selinux/config
SELINUX=disabled
3)重启服务器:reboot
二、安装Rancher
说明:192.168.37.143上同时安装Rancher server和Rancher agent,192.168.37.144上只安装Rancher agent;
1.安装Rancher server
1)sudo docker run -d --restart=always -v /data/rancher/mysql:/var/lib/mysql -p 8080:8080 rancher/server
说明:将server端的mysql数据库挂载到宿主机;
命令执行后会自动下载Rancher server镜像并启动,可以通过sudo docker images查看rancher/server镜像,通过sudo docker ps 查看启动的rancher server容器。
2)iptables开启8080端口
2.安装Rancher agent
1)通过浏览器访问:http://192.168.37.143:8080,当前Rancher已经支持中文界面,可以选择页面下方语言选项,切换为中文显示。
2)添加主机:基础架构-》主机-》添加主机
Rancher当前支持多种关联主机添加方式,比如亚马逊的EC2,或者微软的Azure,此处我们选择Custom,关联我们自己的主机。
此处需要配置第四项,该项的含义是被管理的docker主机的IP地址;
然后负责第五项中的内容,在docker主机上执行即可。
注意:要开启server端和agent端所有docker主机的udp协议500和4500端口,负责无法通过server端在agent上创建容器和以及容器间的网络互连。
3)分别在144和143上执行该命令:
sudo docker run-e CATTLE_AGENT_IP="192.168.37.144" -d--privileged-v/var/run/docker.sock:/var/run/docker.sock-v/var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2http://192.168.37.143:8080/v1/scripts/BFC6C3956145FFACEF5E:1477987200000:A5utoKrxOqJ1qomMSjVHaJXE
这里注意,在143上执行时,要修改CATTLE_AGENT_IP="192.168.37.144"。
执行命令时同样会自动下载rancher/agent镜像并启动容器,容器启动后可以通过sudo logs 查看容器是否启动正常,以及是否可以与rancher server正常通信。
说明:
某些情况下agent无法与server连接上,可以尝试执行如下操作:
#删除主机映射目录和文件
sudo rm -rf /var/run/docker.sock
sudo rm -rf /var/lib/rancher
#重启docker
sudo systemctl daemon-reload
sudo service docker restart
三、关联主机
1.基础架构-》主机
可以通过点击每个主机右上角的按钮重新编辑主机显示名称。
可以看到143上可以检测到rancher server容器。
如果在安装rancher agent之前,docker主机上已经有容器在运行,则rancher也可以检测出来,并能够对其进行管理。
2.通过docker ps命令查看143和144上的容器运行情况
143:
[hanqunfeng@localhost~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8fc97968bb95rancher/agent-instance:v0.8.3 "/etc/init.d/agent-in" 2hours agoUp 2hours0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp1146d6cc-857b-49e7-addc-691abf19ded5
b45183ca7130 rancher/agent:v1.0.2 "/run.sh run" 2hours agoUp 2hours rancher-agent
28bfb08104f4rancher/server"/usr/bin/s6-svscan /" 2hours agoUp 2hours3306/tcp, 0.0.0.0:8080->8080/tcp distracted_galileo
144:
[hanqunfeng@localhost~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
129bc9e115earancher/agent-instance:v0.8.3 "/etc/init.d/agent-in" 2hours agoUp 2hours0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp94edd3bf-9c98-4d4a-822b-43c2bb6599f7
418e0a5cc41drancher/agent:v1.0.2 "/run.sh run" 2hours agoUp 2hours rancher-agent
可以看到都出来一个运行的容器,开放了500和4500端口,这个容器是rancher之间互联的容器,可以通过在主机页面中开启『显示系统容器』查看到:
四、使用Rancher
Rancher的使用方式是基于环境-->应用栈-->服务-->容器,一个环境可以管理多个应用栈,一个应用栈中可以管理多个服务,一个服务可以管理多个容器。
1.环境
Defult-->环境管理
默认情况下,rancher已经默认创建了一个Default的环境,可以修改其名称。
默认容器编排规则为Cattle,此为rancher自己实现的一种容器编排工具,也可以选择docker的swarm,一般情况下可以不做修改。
2.应用栈
访问rancher服务,默认就会进入应用栈的管理界面,也可以通过页面上方的"应用栈"切换到应用栈的管理界面。
默认情况下,rancher已经在Default环境下创建好了一个Default的缺省栈,可以点击"添加应用栈"创建一个新的应用栈:
我们可以只填写名称创建一个空的应用栈,然后在为其添加服务,也可以通过上传docker-compose.yml和rancher-compose-yml在创建时就添加好服务。
3.服务
我们选择缺省的Default应用栈,并为其添加服务。
点击"添加服务"(不要下拉,直接点击)
1)我们先创建一个mariadb服务(mariadb是mysql的一个衍生版本,这里使用mysql镜像也是一样的)
配置相关环境变量后,点击创建,之后rancher会自动选择一台主机然后自动下载mariadb镜像并启动容器;
有三种服务展示方式,默认为列表方式,在页面上方的『添加服务』后面有三个切换图标,分别代表列表、连接图、ComposeYAML
此时切换到主机页面,可以看到mariadb容器已经在144上创建并启动了:
点击mariadb容器的名称,进入容器监控页面:
查看144上的镜像和容器:
[hanqunfeng@localhost~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mariadb latest3034b40630a2 10days ago389.8MB
docker.io/rancher/agent-instance v0.8.3b6b013f2aa854months ago330.9MB
docker.io/rancher/agent v1.0.2 860ed2b2e8e3 4months ago454.3MB
[hanqunfeng@localhost~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d70a8a45739c mariadb:latest"docker-entrypoint.sh" 21minutes agoUp 21minutes3306/tcp r-Default_mariadb_1
129bc9e115earancher/agent-instance:v0.8.3 "/etc/init.d/agent-in" 2hours agoUp 2hours0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp94edd3bf-9c98-4d4a-822b-43c2bb6599f7
418e0a5cc41drancher/agent:v1.0.2 "/run.sh run" 2hours agoUp 2hours rancher-agent
2)创建wordpress服务
这里创建4个wordpress服务,目标服务选择刚刚创建的mariadb,并配置好环境变量,点击创建,rancher会自动选择agent主机进行部署。
注意,wordpress默认使用80端口,这里我们没有进行主机端口映射,是为了留到后面配置负载均衡的时候配置。
此时看到4个wordpress容器都已经启动成功了,查看各自容器的日志会看到与数据库链接正常。
切换到主机页面:
可以看到rancher分别在两台主机上启动了2个容器,多次测试发现,这是随机的,有时候一台主机上会同时启动三个容器。
3)创建负载均衡服务
这里目标服务选择刚刚创建的wordpress,并映射80端口。
说明:这里设置会话粘性,可以保证同一个用户的所有请求都会发送给同一个后端服务。
创建成功后:
切换到主机页面:
可以看到负载均衡服务被创建到了144上,这里要开启右上角的"显示系统容器",否则查看不到的。
访问:http://192.168.37.144
配置好相关设置,登录wordpress:
这里需要说明的是,如果配置负载均衡服务时,没有设置会话粘性,会导致无法登录系统。