飘逸峰的博客

Spring--Java程序员的春天

docker管理web:rancher/server

一、安装前准备

1.如果docker主机是通过虚拟机安装的,则配置网络链接时需要选择桥接方式,使虚拟机在局域网环境下可以被访问到;

2.通过虚拟机安装两台centos7虚拟机,并安装好docker:

  1. sudo yum instsll docker
  2. sudo service docker start
  3. sudo chkconfig docker on
3.关闭firewalld,启用iptables

  1. 关闭firewalld
  2. sudo systemctl stop firewalld
  3. sduo systemctl mask firewalld
  4. 并且安装iptables-services
  5. sudo yum install iptables-services
  6. 设置开机启动:
  7. sudo systemctl enable iptables
  8. 手动操作iptablse命令:
  9. sudo systemctl start iptables
  10. 保存到/etc/sysconfig/iptablse
  11. sudo service iptables save
4.iptables配置
sudo vi /etc/sysconfig/iptables
  1. # Generated by iptables-save v1.4.21 on Tue Nov 1 10:48:39 2016
  2. *nat
  3. :PREROUTING ACCEPT [27:11935]
  4. :INPUT ACCEPT [0:0]
  5. :OUTPUT ACCEPT [0:0]
  6. :POSTROUTING ACCEPT [0:0]
  7. :DOCKER - [0:0]
  8. -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
  9. -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
  10. -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
  11. COMMIT
  12. #
  13. *filter
  14. :INPUT ACCEPT [0:0]
  15. :FORWARD ACCEPT [0:0]
  16. :OUTPUT ACCEPT [47:10966]
  17. :DOCKER - [0:0]
  18. -A FORWARD -o docker0 -j DOCKER
  19. -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  20. -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
  21. -A FORWARD -i docker0 -o docker0 -j ACCEPT
  22. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  23. -A INPUT -p icmp -j ACCEPT
  24. -A INPUT -i lo -j ACCEPT
  25. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  26. -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
  27. -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
  28. -A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT
  29. -A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT
  30. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  31. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  32. COMMIT
  33. # Completed on Tue Nov 1 10:48:39 2016

5.设置阿里云镜像服务

  1. sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
  2. 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
  3. sudo systemctl daemon-reload
  4. 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上执行该命令:

  1. 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.2 http://192.168.37.143:8080/v1/scripts/BFC6C3956145FFACEF5E:1477987200000:A5utoKrxOqJ1qomMSjVHaJXE


这里注意,在143上执行时,要修改CATTLE_AGENT_IP="192.168.37.144"


执行命令时同样会自动下载rancher/agent镜像并启动容器,容器启动后可以通过sudo logs <容器ID> 查看容器是否启动正常,以及是否可以与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:

  1. [hanqunfeng@localhost ~]$ sudo docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 8fc97968bb95 rancher/agent-instance:v0.8.3 "/etc/init.d/agent-in" 2 hours ago Up 2 hours 0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp 1146d6cc-857b-49e7-addc-691abf19ded5
  4. b45183ca7130 rancher/agent:v1.0.2 "/run.sh run" 2 hours ago Up 2 hours rancher-agent
  5. 28bfb08104f4 rancher/server "/usr/bin/s6-svscan /" 2 hours ago Up 2 hours 3306/tcp, 0.0.0.0:8080->8080/tcp distracted_galileo


144:
  1. [hanqunfeng@localhost ~]$ sudo docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 129bc9e115ea rancher/agent-instance:v0.8.3 "/etc/init.d/agent-in" 2 hours ago Up 2 hours 0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp 94edd3bf-9c98-4d4a-822b-43c2bb6599f7
  4. 418e0a5cc41d rancher/agent:v1.0.2 "/run.sh run" 2 hours ago Up 2 hours 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上的镜像和容器:                                                     
  1. [hanqunfeng@localhost ~]$ sudo docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. docker.io/mariadb latest 3034b40630a2 10 days ago 389.8 MB
  4. docker.io/rancher/agent-instance v0.8.3 b6b013f2aa85 4 months ago 330.9 MB
  5. docker.io/rancher/agent v1.0.2 860ed2b2e8e3 4 months ago 454.3 MB
  6. [hanqunfeng@localhost ~]$ sudo docker ps
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. d70a8a45739c mariadb:latest "docker-entrypoint.sh" 21 minutes ago Up 21 minutes 3306/tcp r-Default_mariadb_1
  9. 129bc9e115ea rancher/agent-instance:v0.8.3 "/etc/init.d/agent-in" 2 hours ago Up 2 hours 0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp 94edd3bf-9c98-4d4a-822b-43c2bb6599f7
  10. 418e0a5cc41d rancher/agent:v1.0.2 "/run.sh run" 2 hours ago Up 2 hours 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:

这里需要说明的是,如果配置负载均衡服务时,没有设置会话粘性,会导致无法登录系统。


0%