用容器轻松搭建Rancher运行环境
Rancher是开源的容器平台,功能齐全,部署简单,支持Kubernets和Docker Swarm。它把自己定位在持续交付流水线上的后半段上,如下图所示:
2016年3月底刚刚发布了1.0正式版。借着这个契机,下面就让我们用容器来部署一套Rancher环境试试它的功能吧!
准备工作
我们需要先安装virtualBox和vagrant。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如test
,运行以下命令:
里面应该有一句config.vm.box = "minimum/ubuntu-trusty64-docker"
,在它的下面添加如下几行代码,相当于给它分配三台虚拟机,一台叫做server,它的IP是192.168.33.17;另两台分别是agent1和agent2,它们的IP是192.168.33.18和192.168.33.19。
这个vagrant镜像已经在ubuntu的基础上帮我们安装了docker,用起来很方便。然后分别在三个终端运行以下命令启动并连接三台虚拟机。
|
|
|
|
如果想要在接下来的步骤中获得良好体验,建议先下载以下镜像:
搭建环境
启动Rancher服务器相当简单,一条命令而已:
稍待片刻,就可以访问Rancher主页http://192.168.33.17:8080了:
不像其他的web应用一开始没有数据时都是显示一片空白,Rancher展示了非常丰富的信息来帮助我们尽快上手。菜单上的ADMIN有个红色的感叹号,这是因为我们刚启动服务器,还没有配置认证信息。点击这个感叹号就可以开始配置,除了本地设置用户名密码以外,还支持与AD、GitHub和LDAP的集成。这里我们更加关注容器管理部分,对鉴权有兴趣的朋友可以自行尝试认证信息的配置。点击菜单上的INFRASTRUCTURE并点击Add Host按钮,可以增加一个agent host。由于现在我们用的是内部IP192.168.33.17,Rancher会提示我们是否真的连接到这里,不用管它直接点击Save按钮就可以了。复制下一个页面中第5步的命令,在agent上1运行即可。在我的虚拟机上是这样子的:
然后就可以点击Close,稍待片刻,就能看到agent1已经被加入到Hosts里了:
在agent2上重复执行一遍命令,把agent2也加入到Hosts里。Rancher的server和agent都是设置为restart=true
的,所以重启虚拟机之类的行为也不会影响Rancher正常工作。现在看到的Hosts应该是这样的:
运行容器
接下来运行一个tomcat容器试试。点击agent1上的Add Container按钮,如下填入参数:
- Name:tomcat
- Select Image:tomcat:8.0.30-jre8
- Public (on Host) IP/Port:8080
- Private (in Container) Port:8080
然后点击最下方的Create按钮:
过一段时间,便能看到如下的容器已经启动完成了:
之所以需要等一段时间,是因为它像kubernetes一样,需要给容器配一个网络代理Network Agent,不过功能要复杂得多,拥有跨网络通信、健康检查等功能。当前版本下使用的网络代理镜像为rancher/agent-instance:v0.8.1
。在agent1上运行docker ps
便能看到这两个容器。还可以通过http://192.168.33.18:8080来访问tomcat服务。在页面上点击某个容器比如tomcat,可以看到容器的基本信息和一些基本监控数据。如图:
自行启动的容器也能被Rancher监控到。我们来启动一个小容器:
在界面上便能看到这个bb容器已经启动完成了:
通过Rancher启动的容器IP是在10.42.*.*
区间的,自行启动的bb容器的IP是在它之外的。如果想用相同IP段,可以使用以下命令:
在界面上可以看到bb2容器的IP已经落入区间了:
运行应用
上面我们在指定的虚拟机上创建容器。不过对于一个真实的网络应用,我们并不关心它运行在哪里,只关心服务地址罢了。下面我们来创建一个这样的WordPress应用。它包含一个MySQL数据库,两个WordPress实例和一套负载均衡。首先点击APPLICATIONS,然后点击Default的Add Service。填入:
- Name:database
- Select Image:mysql:5.7.10
- Always pull image before creating:false
- Environment Vars:MYSQL_ROOT_PASSWORD=pass1
然后点击Create来创建这个MySQL服务。接下来是WordPress,还是像MySQL那样新建服务。填入:
- Scale:2
- Name:mywordpress
- Select Image:wordpress:4.4.2
- Always pull image before creating:false
- Service Links:database > mysql
然后点击Create来创建这个WordPress服务。最后是负载均衡,点击Add Service旁边的向下箭头,选择Add Load Balancer。填入:
- Scale:Always run one instance of this container on every host
- Name:wordpresslb
- Source IP/Port:80
- Default Target Port:80
- Target Service:mywordpress
点击Save来创建这个负载均衡。稍待片刻,就可以看到wordpresslb变为Active状态了,然后就可以访问http://192.168.33.18或http://192.168.33.19来使用WordPress服务了:
Rancher负载均衡使用和网络代理一样的rancher/agent-instance
镜像。它内置了HAProxy,默认使用轮询。
预置模板
点击CATALOG,便能看到Rancher为我们预置了一系列的应用模板。我们用个小镜像Etcd试试。首先找到Etcd的图标:
点击View Details进入etcd详细页面,滚动到最下方。由于我们只有两个agent,在Number of Nodes里填入1,然后点击Launch按钮。很快,一个etcd服务就启动起来了。按如下参数给这个服务增加一套负载均衡:
- Scale:Always run one instance of this container on every host
- Name:etcdlb
- Source IP/Port:2379
- Protocol:tcp
- Default Target Port:2379
- Target Service:etcd
还可以点击Preview来查看docker-compose.yml
和rancher-compose.yml
文件,里面也有比较详细的注释。docker-compose.yml
不必多说,rancher-compose.yml
类似于它但更小一些。可以在任何Rancher页面的右下方点击Download CLI来下载rancher compose命令行工具,这样就可以通过命令行而非在网页上点来点去来管理容器和服务了。最后点击Save并等待负载均衡启动完成,就可以访问啦:
太方便了,简直是爽得不能不能的。最后送上全家福大图一张: