文章目录
  1. 1. 准备工作
  2. 2. 搭建环境
  3. 3. 运行容器
  4. 4. 运行应用
  5. 5. 预置模板

Rancher是开源的容器平台,功能齐全,部署简单,支持Kubernets和Docker Swarm。它把自己定位在持续交付流水线上的后半段上,如下图所示:

2016年3月底刚刚发布了1.0正式版。借着这个契机,下面就让我们用容器来部署一套Rancher环境试试它的功能吧!

准备工作

我们需要先安装virtualBoxvagrant。通过vagrant来驱动virtualBox搭建一个虚拟测试环境。首先在本地任意路径新建一个空文件夹比如test,运行以下命令:

virtual box host
1
2
3
4
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;另两台分别是agent1agent2,它们的IP是192.168.33.18192.168.33.19

Vagrantfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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,用起来很方便。然后分别在三个终端运行以下命令启动并连接三台虚拟机。

virtual box host terminal 1
1
2
vagrant up
vagrant ssh server

virtual box host terminal 2
1
vagrant ssh agent1
virtual box host terminal 3
1
vagrant ssh agent2

如果想要在接下来的步骤中获得良好体验,建议先下载以下镜像:

server agent1 agent2
1
2
3
4
5
6
7
8
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服务器相当简单,一条命令而已:

server
1
2
3
4
5
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。由于现在我们用的是内部IP192.168.33.17,Rancher会提示我们是否真的连接到这里,不用管它直接点击Save按钮就可以了。复制下一个页面中第5步的命令,在agent上1运行即可。在我的虚拟机上是这样子的:

agent1
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按钮,如下填入参数:

  • 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监控到。我们来启动一个小容器:

agent1
1
docker run -d --name=bb busybox:1.24.1 sleep 3600

在界面上便能看到这个bb容器已经启动完成了:

通过Rancher启动的容器IP是在10.42.*.*区间的,自行启动的bb容器的IP是在它之外的。如果想用相同IP段,可以使用以下命令:

agent1
1
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。填入:

  • 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.18http://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.ymlrancher-compose.yml文件,里面也有比较详细的注释。docker-compose.yml不必多说,rancher-compose.yml类似于它但更小一些。可以在任何Rancher页面的右下方点击Download CLI来下载rancher compose命令行工具,这样就可以通过命令行而非在网页上点来点去来管理容器和服务了。最后点击Save并等待负载均衡启动完成,就可以访问啦:

1
2
curl -L http://192.168.33.18:2379/version
curl -L http://192.168.33.19:2379/version

太方便了,简直是爽得不能不能的。最后送上全家福大图一张:

文章目录
  1. 1. 准备工作
  2. 2. 搭建环境
  3. 3. 运行容器
  4. 4. 运行应用
  5. 5. 预置模板