1. 安装Rancher服务
环境准备
至少准备一台linux主机(我用的是3台centos7.9),并支持docker
IP | 主机名 | 系统 | docker版本 |
192.168.56.104 | master | centos7 | 1.13.1 |
192.168.56.102 | slave1 | centos7 | 1.13.1 |
192.168.56.105 | slave2 | centos7 | 1.13.1 |
基于docker构建
使用如下镜像,Rancher server服务只需要构建在一台机器上即可。我选用的slave1(资源空闲多)构建rancher server
下载镜像
$ docker pull rancher/server
构建容器
$ docker run -d -p 8090:8080 --name rancher rancher/server
rancher集群参数:
$ –advertise-address IP or Node
rancher有内置的数据库,一般不需要连接外部数据 如果需要连接外部数据库,参数:
$ –db-host myhost.example.com –db-port 3306 –db-user username –db-pass password –db-name cattle
初始设置
访问:http://192.168.56.102:8090/,访问失败请稍等一会。
设置中文
拉到右下角,我最后才发现~
2. 实践Docker容器管理
在添加你的第一个服务或构建第一个容器之前,需要先添加一台支持Docker的Linux主机,要不然什么都做不了:
向Rancher服务注册Linux主机
注意:在添加主机时,先填写当前要添加的主机IP。不设置主机IP的话,添加loadbalance服务时,分布在其他主机上的容器服务可能会代理不到。
下面红框的意思是:复制这个命令,在支持docker的Linux主机上运行。向rancher服务注册该主机。其实际操作是下载并运行 rancher/agent:v1.2.11 这个镜像。并向192.168.56.102:8090这个Rancher服务注册。
可以发现,我的3台机器都注册到rancher服务了。
尝试构建应用服务
我先简单尝试,在Default环境构建一个基于docker的Nginx服务。
添加Nginx服务,端口映射90->80
点击构建后,可以看到在主机名为slave2的机器上,已经构建完成。下图那个IP=10.42.77.212,是构建后的容器内部地址,外部无法访问。
访问成功,没有问题。这个slave2我已经在本机电脑hosts配置了域名解析。
至此,Rancher构建完成并完成了简单的测试。
总结几点
- 对应用点击升级后,rancher支持滚动发布。原先的容器停用并启动一个新的容器。但必须点击“升级完成”,新应用才生效。否则是原应用生效。(点击升级时,修改映射主机的端口号。就可以看到是原端口还是新端口生效)
- Default环境注册了3个主机.(master、slave1、slave2、)。我升级应用服务Nginx并修改映射主机端口是100。原生效的服务是slave2:90,但新运行容器构建到主机master了。它会在多个可用主机间,自行选择来构建应用服务。
- Default环境,我从“基础架构” -> “主机”,把该环境注册的master, slave2先停用、再删除。结果发现刚构建在master机器上的Nginx容器,又被其挪到了主机slave1上。
以上3点亲测。就不截图了。
3. 使用loadblance代理应用服务
我先添加一个应用 mynginx。在这个应用上添加服务
继续添加一个Nginx服务(请注意:选择 “总是在每台主机上运行一个此容器的实例”)。
再添加一个loadbalance服务,给nginx服务做代理。
负载均衡服务(请注意:选择 “总是在每台主机上运行一个此容器的实例”):
当构建完成后。我们发现,rancher在两台主机上分别构建了 nginx 和 nginx-loadbalance 两个服务。
需要明确:这两个lb服务分别只能对本主机上的nginx服务,实现代理。跨主机间的代理不能实现。
测试以下,访问代理 loadbance 服务提供的端口:
测试完成,应用的代理服务能正常使用。
4. 容器集群的横向扩容,以及loadbalance代理的意义
现有一个应用栈myapp,在每台主机上分别构建一个nginx服务,以及该服务的loadbalance代理服务。代理服务的端口映射是:8000->80。
现在因为service1压力比较大,我们准备横向扩容,继续添加服务节点。点击编辑:
将该应用服务节点,扩展至5个
我们可以发现,当服务节点数 > 环境主机数时。容器会随机散布在各主机上。现在slave2主机已经运行了3个service1服务的容器。
当N次请求http:slave2:8000时,通过分别监控slave2主机这3个容器的日志,可以发现:slave2上的lb实现了对应用服务,在本主机的多个容器的负载均衡。
总结loadbalance代理的意义:
- 容器服务不对主机进行端口映射,而是使用rancher提供的基础设施li-service-haproxy。lb代理通过绑定引用服务名作为标签。会负载当前环境下、分布在多个主机里的应用服务的容器。
- 实际应用中lb一般会启动两个容器服务,来避免单点问题。
- lb服务已经实现了负载均衡,能直接对接F5。如果一个环境对应的主机过多,2个lb容器要绑定到固定的两台主机。以便F5或ng代理能匹配到对应的ip上。
5. 访问控制
添加登录用户验证
登录成功后,设置默认环境