Rancher 是开源的容器平台,功能齐全,部署简单,支持Kubernets和Docker Swarm。它把自己定位在持续交付流水线上的后半段上,如下图所示:
2016年3月底刚刚发布了1.0正式版。借着这个契机,下面就让我们用容器来部署一套Rancher环境试试它的功能吧!
我们需要先安装 virtualBox 和 vagrant 。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如 test
,运行以下命令:
mkdir test
cd test
vagrant init minimum/ubuntu-trusty64-docker
vi Vagrantfile
里面应该有一句 config.vm.box = "minimum/ubuntu-trusty64-docker"
,在它的下面添加如下几行代码,相当于给它分配三台虚拟机,一台叫做 server ,它的IP是 192.168.33.17 ;另两台分别是 agent1 和 agent2 ,它们的IP是 192.168.33.18 和 192.168.33.19 。
config.vm.define "server" do | host |
host.vm.hostname = "server"
host.vm.network "private_network", ip: "192.168.33.17"
host.vm.provider "virtualbox" do |v|
v.memory = 1024
end
end
config.vm.define "agent1" do | host |
host.vm.hostname = "agent1"
host.vm.network "private_network", ip: "192.168.33.18"
host.vm.provider "virtualbox" do |v|
v.memory = 1024
end
end
config.vm.define "agent2" do | host |
host.vm.hostname = "agent2"
host.vm.network "private_network", ip: "192.168.33.19"
host.vm.provider "virtualbox" do |v|
v.memory = 1024
end
end
这个vagrant镜像已经在ubuntu的基础上帮我们安装了docker,用起来很方便。然后分别在三个终端运行以下命令启动并连接三台虚拟机。
vagrant up
vagrant ssh server
vagrant ssh agent1
vagrant ssh agent2
如果想要在接下来的步骤中获得良好体验,建议先下载以下镜像:
docker pull rancher/server:v1.0.0
docker pull rancher/agent:v0.11.0
docker pull rancher/agent-instance:v0.8.1
docker pull tomcat:8.0.30-jre8
docker pull busybox:1.24.1
docker pull mysql:5.7.10
docker pull wordpress:4.4.2
docker pull rancher/etcd:v2.3.0
启动Rancher服务器相当简单,一条命令而已:
docker run -d /
--name=rs /
--restart=always /
-p 8080:8080 /
rancher/server:v1.0.0
稍待片刻,就可以访问Rancher主页 http://192.168.33.17:8080 了:
不像其他的web应用一开始没有数据时都是显示一片空白,Rancher展示了非常丰富的信息来帮助我们尽快上手。菜单上的 ADMIN 有个红色的感叹号,这是因为我们刚启动服务器,还没有配置认证信息。点击这个感叹号就可以开始配置,除了本地设置用户名密码以外,还支持与AD、GitHub和LDAP的集成。这里我们更加关注容器管理部分,对鉴权有兴趣的朋友可以自行尝试认证信息的配置。点击菜单上的 INFRASTRUCTURE 并点击 Add Host 按钮,可以增加一个agent host。由于现在我们用的是内部IP 192.168.33.17 ,Rancher会提示我们是否真的连接到这里,不用管它直接点击 Save 按钮就可以了。复制下一个页面中第5步的命令,在agent上1运行即可。在我的虚拟机上是这样子的:
sudo docker run -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v0.11.0 http://192.168.33.17:8080/v1/scripts/B9EAC6780C8126FB739E:1460016000000:Adj9D4Qp3smSmIscdUVT0JSCPdM
然后就可以点击 Close ,稍待片刻,就能看到agent1已经被加入到Hosts里了:
在agent2上重复执行一遍命令,把agent2也加入到Hosts里。Rancher的server和agent都是设置为 restart=true
的,所以重启虚拟机之类的行为也不会影响Rancher正常工作。现在看到的Hosts应该是这样的:
接下来运行一个tomcat容器试试。点击agent1上的 Add Container 按钮,如下填入参数:
然后点击最下方的 Create 按钮:
过一段时间,便能看到如下的容器已经启动完成了:
之所以需要等一段时间,是因为它像kubernetes一样,需要给容器配一个网络代理Network Agent,不过功能要复杂得多,拥有跨网络通信、健康检查等功能。当前版本下使用的网络代理镜像为 rancher/agent-instance:v0.8.1
。在agent1上运行 docker ps
便能看到这两个容器。还可以通过 http://192.168.33.18:8080 来访问tomcat服务。在页面上点击某个容器比如tomcat,可以看到容器的基本信息和一些基本监控数据。如图:
自行启动的容器也能被Rancher监控到。我们来启动一个小容器:
docker run -d --name=bb busybox:1.24.1 sleep 3600
在界面上便能看到这个bb容器已经启动完成了:
通过Rancher启动的容器IP是在 10.42.*.*
区间的,自行启动的bb容器的IP是在它之外的。如果想用相同IP段,可以使用以下命令:
docker run -d --name=bb2 --label io.rancher.container.network=true busybox:1.24.1 sleep 3600
在界面上可以看到bb2容器的IP已经落入区间了:
上面我们在指定的虚拟机上创建容器。不过对于一个真实的网络应用,我们并不关心它运行在哪里,只关心服务地址罢了。下面我们来创建一个这样的WordPress应用。它包含一个MySQL数据库,两个WordPress实例和一套负载均衡。首先点击 APPLICATIONS ,然后点击Default的 Add Service 。填入:
然后点击 Create 来创建这个MySQL服务。接下来是WordPress,还是像MySQL那样新建服务。填入:
然后点击 Create 来创建这个WordPress服务。最后是负载均衡,点击 Add Service 旁边的向下箭头,选择 Add Load Balancer 。填入:
点击 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服务就启动起来了。按如下参数给这个服务增加一套负载均衡:
还可以点击 Preview 来查看 docker-compose.yml
和 rancher-compose.yml
文件,里面也有比较详细的注释。 docker-compose.yml
不必多说, rancher-compose.yml
类似于它但更小一些。可以在任何Rancher页面的右下方点击 Download CLI 来下载rancher compose命令行工具,这样就可以通过命令行而非在网页上点来点去来管理容器和服务了。最后点击 Save 并等待负载均衡启动完成,就可以访问啦:
curl -L http://192.168.33.18:2379/version
curl -L http://192.168.33.19:2379/version
太方便了,简直是爽得不能不能的。最后送上全家福大图一张: