rancher是一个docker集群化管理平台,相对于mesos和k8s架构,rancher的部署管理非常简单方便。并且功能丰富。如下为本人绘制的逻辑架构图。

1:部署Rancher管理平台

规划:

server:10.64.5.184 

agent1:10.64.5.185

agent2:10.64.5.186

agent3:10.64.5.187

agent4:10.64.5.188

部署方式:

docker容器启动

server端部署  

依赖镜像:rancher/server:latest   

# docker run -d --restart=always -v /home/heqinqin/data:/var/lib/mysql -p 8080:8080 rancher/server

agent部署

依赖镜像:rancher/agent:v0.8.2  

浏览器访问server_ip:8080,点击Add host.执行下图中sever管理端生成的Add host命令,即可将host添加到server端管理。

添加两个host之后

2:部署stack和service

rancher管理容器是以stack为一个任务组,在stack下可以有多个service共同提供业务,而每个service可以包含多个容器。

下面来创建一个web集群,来提供网站服务

1:创建一个Stack,命名为WEB-Server

2:创建一个Service,命名为Nginx-cluster,运行十个nginx容器。

3:点击start启动service,开始部署container。

4:创建一个Load Balance负载均衡器

5:创建一个Load Balance负载均衡器,设置端口映射,选择负载均衡的服务。

6:WEB-server的服务创建成功。一个stack包含了两个service。

7:点击显示架构图,可清楚看到逻辑关系.

8:同理创建一个WordPress服务,如下。

3:Rancher的相关特性,功能

  • 网络+负载均衡

依赖镜像:rancher/agent-instance:v0.5.0 

采用SDN技术所建容器为虚拟ip地址10段(常规为docker内部地址172段),各host之间容器采用ipsec隧道实现跨主机通信,使用的是udp的500和4500端口。

启动任务时,在各个host部署容器之前会起一个Network  Agent容器,负责组建网络环境。   

  • 监控管理

包括:主机监控+和容器监控

监控内容:CPU+Memory+Network+storge

  • 用户管理和访问控制

支持多种访问控制权限管理。保证平台安全。

支持用户组及权限设置(如下图设置了运维OPS环境和开发DEV环境,实现管理隔离)。

  • 集成第三方软件镜像(官方会持续更新)

4:破坏性测试

server是以胖容器方式运行,其中包含了mysql数据库,经测试,数据库保存了任务数据以及任务逻辑关系。

破坏server端

1.

操作:在server端和agent端正常运行状态下,stop掉server容器,

结果:业务不受影响。start重启容器后恢复管理功能。

2.

操作:将server端容器rm删除掉(未将mysql数据映射至宿主机),重新再起一个server容器。

结果:1.当前业务不受影响

      2.新server仍然能够识别和管理各个agent,因为agent端是连server的ip端口,ip不变就能连上

      3.agent端原有的任务容器的命名和逻辑关系没有了。

3.

操作:将server端容器rm删除掉(将mysql数据/var/lib/mysql 映射至宿主机),重新再起一个server容器。

结果:新起的容器能够识别任务状态,命名,逻辑关系。恢复到之前的状态。

破坏agent端

4.

操作:host命令行下删除掉agent容器

结果:不影响当前业务状态,server端显示host失联,无法对该agent下发任务进行扩容和缩容。

重新启动agent后恢复正常。

5.

操作:server控制端删除agent端的业务容器(例如删除nginx容器)

结果:删除后数秒内,在另一个host上重新启动一个新的业务容器。

6.

操作:host命令行下删除agent端的业务容器(例如删除nginx容器)

结果:删除后数秒内,在当前host上重新启动一个新的业务容器。

7.

操作:host命令行下删除掉agent容器后,再删除一个业务容器

结果:server端因为与agent失联,导致无法更新该host上的容器变化,没有新启动任何容器。

测试未完。。。

---当前结论  

1:server节点需要单独部署,并相对给予较高性能。

2:server节点宕机不会对现有业务造成影响,但是可能会对后期管理造成影响。

3:需要将server端数据保存至宿主机,并定期备份数据库数据。

4:server端对host的管理完全是依赖agent容器,当无法联系agent容器时,无法得知当前host上容器的变化,在终端显示的是最后一次agent通知的内容状态。