转载

用容器轻松搭建Rancher运行环境

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

用容器轻松搭建Rancher运行环境

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

准备工作

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

virtual box host
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
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
vagrant up
vagrant ssh server
virtual box host terminal 2
vagrant ssh agent1
virtual box host terminal 3
vagrant ssh agent2

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

server agent1 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服务器相当简单,一条命令而已:

server
docker run -d /
--name=rs /
--restart=always /
-p 8080:8080 /
rancher/server:v1.0.0

稍待片刻,就可以访问Rancher主页 http://192.168.33.17:8080 了:

用容器轻松搭建Rancher运行环境

不像其他的web应用一开始没有数据时都是显示一片空白,Rancher展示了非常丰富的信息来帮助我们尽快上手。菜单上的 ADMIN 有个红色的感叹号,这是因为我们刚启动服务器,还没有配置认证信息。点击这个感叹号就可以开始配置,除了本地设置用户名密码以外,还支持与AD、GitHub和LDAP的集成。这里我们更加关注容器管理部分,对鉴权有兴趣的朋友可以自行尝试认证信息的配置。点击菜单上的 INFRASTRUCTURE 并点击 Add Host 按钮,可以增加一个agent host。由于现在我们用的是内部IP 192.168.33.17 ,Rancher会提示我们是否真的连接到这里,不用管它直接点击 Save 按钮就可以了。复制下一个页面中第5步的命令,在agent上1运行即可。在我的虚拟机上是这样子的:

agent1
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里了:

用容器轻松搭建Rancher运行环境

在agent2上重复执行一遍命令,把agent2也加入到Hosts里。Rancher的server和agent都是设置为 restart=true 的,所以重启虚拟机之类的行为也不会影响Rancher正常工作。现在看到的Hosts应该是这样的:

用容器轻松搭建Rancher运行环境

运行容器

接下来运行一个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 按钮:

用容器轻松搭建Rancher运行环境

过一段时间,便能看到如下的容器已经启动完成了:

用容器轻松搭建Rancher运行环境

之所以需要等一段时间,是因为它像kubernetes一样,需要给容器配一个网络代理Network Agent,不过功能要复杂得多,拥有跨网络通信、健康检查等功能。当前版本下使用的网络代理镜像为 rancher/agent-instance:v0.8.1 。在agent1上运行 docker ps 便能看到这两个容器。还可以通过 http://192.168.33.18:8080 来访问tomcat服务。在页面上点击某个容器比如tomcat,可以看到容器的基本信息和一些基本监控数据。如图:

用容器轻松搭建Rancher运行环境

自行启动的容器也能被Rancher监控到。我们来启动一个小容器:

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

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

用容器轻松搭建Rancher运行环境

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

agent1
docker run -d --name=bb2 --label io.rancher.container.network=true busybox:1.24.1 sleep 3600

在界面上可以看到bb2容器的IP已经落入区间了:

用容器轻松搭建Rancher运行环境

运行应用

上面我们在指定的虚拟机上创建容器。不过对于一个真实的网络应用,我们并不关心它运行在哪里,只关心服务地址罢了。下面我们来创建一个这样的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负载均衡使用和网络代理一样的 rancher/agent-instance 镜像。它内置了HAProxy,默认使用轮询。

预置模板

点击 CATALOG ,便能看到Rancher为我们预置了一系列的应用模板。我们用个小镜像Etcd试试。首先找到Etcd的图标:

用容器轻松搭建Rancher运行环境

点击 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 并等待负载均衡启动完成,就可以访问啦:

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

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

用容器轻松搭建Rancher运行环境
原文  http://qinghua.github.io/rancher/
正文到此结束
Loading...