对于开发人员而言,他们的最终目标是拥有本身的数据中心(data center),使他们可以在贴近真实状况的副本上测试他们的服务。然而,开发人员的开发过程当中却充满了妥协。由于,数据要么是个简化集,要么被匿名,这加大了开发人员的开发难度。而且公司也尚未准备好为每一位开发人员搭建一个数据中心。git
今天,我将提供一个过程摘要来阐明如何使用Rancher和本地计算机减小开发人员在开发时的妥协。咱们的目标是为开发人员提供尽量具备表明性的环境,以致于其可被用于真实的生产环境中,咱们将使用Docker和Rancher来作到这一点。github
若是您遇到过下列任何一项烦恼:docker
共享的开发环境因多个问题而崩溃服务器
测试数据不一致网络
网络问题拖延开发进度负载均衡
我但愿可以提供给您一些解决这些问题的想法。ssh
一个全部服务都在裸机上运行的数据中心,没法将其复制到笔记本上。选择使用虚机方式迁移则有助于这个过程,部分缘由在于虚拟化可让用户运行多个(agent)服务。这样一来,硬件环境随即成为问题的关键所在。不管是磁盘的输入输出不足以支持服务仍是没有足够的内存,都会使得搭建一个产品级的生产环境副本以失败了结。然而Docker和Rancher却能够帮您解决这些难题。Docker帮您快速启动容器,Rancher帮您解决编排、网络和负载均衡等一系列问题。工具
经过这种组合,在您的笔记本电脑上运行数据中心逐渐变为可能。这个想法在最近的六个月来变得很是受欢迎,由于许多大型机构已经开始为开发人员提供一个完整的docker management layer以让数据中心可以在本地运行。许多公司正在进行这项投资,由于他们可以得到各类各样的好处,其中包括:测试
开发人员在看到问题时更熟悉如何使用工具解决url
开发人员在交付代码以前可以找出问题
开发人员可以独立工做,甚至离线工做
新的开发者能够在几分钟内进行工做,而不须要花费几天或是几周来适应开发环境
DevOps工做的主机永远不会宕机。
那么,咱们该如何作呢?出于写这个博客的目的,我会假设正在Mac或Windows上使用Docker Toolbox。下载安装和说明文件能够在这里找到https://www.docker.com/produc...。
首先,让咱们来看看它长什么样子:
咱们将运行两个虚拟机,一个虚拟机只运行Rancher Server,另外一个虚拟机做为主机运行并运行应用程序堆栈。用这样的配置有几个缘由。首先,它对于真正的情形比较有表明性。其次,一旦出现问题,您的应用程序没法使Rancher因资源不足而发生饥饿现象。
因此,首先第一件事,让咱们建立一个具备512 GB和8 GB磁盘的VirtualBox虚拟机。
docker-machine create rancher --driver virtualbox --virtualbox-cpu-count "-1" --virtualbox-disk-size "8000" --virtualbox-memory "512" --virtualbox-boot2docker-url=https://github.com/boot2docker/boot2docker/releases/download/v1.10.3/boot2docker.iso
咱们指定的URL指向的是Rancher可以运行的Docker v1.10.3版本。
Docker Toolbox是在本地运行Docker的理想选择,但运行它确实有一些挑战性。缘由之一是它使用了DHCP协议,若是你不想托管静态服务的话,这将是一个不错的选择。可是,要绕开这个ssh协议链接到Rancher虚拟机的话,加上下面的这一行代码到/var/lib/boot2docker/profile:
sudo cat /var/run/udhcpc.eth1.pid | xargs sudo killsudo ifconfig eth1 <ip address to assign> netmask <subnet mask> broadcast <broadcast address> up
此时,您将在docker-machine中出现一个关于IP地址不匹配的错误。您能够在主机操做系统上运行如下命令来解决这个问题:
docker-machine regenerate-certs rancher -f
这将给咱们的Rancher服务器分配一个静态IP地址。 而后,您能够运行:
docker run -d --restart=always -p 8080:8080 rancher/server
几分钟后,将有一个Rancher服务器在您指定的IP地址的8080端口上运行。保持Rancher服务器的IP地址不变很重要,由于这是咱们部署的任何主机代理都须要访问的地方。
登陆到Rancher服务器以后,转到“添加主机(add host)”并生成自定义代理命令。复制这个命令并保留它,由于咱们将使用这个命令来添加主机。
如今让咱们建立第二个虚拟机。使用与上述相同的命令,您能够自行调整虚拟机的名称、内存和磁盘空间,以知足您的开发需求。
等待虚拟机再一次启动后,您能够进入并为其分配一个静态IP地址。
如今,咱们遇到了boot2docker虚拟机的另外一个限制:其数据持久性的限制。
若是咱们向主机添加一个Rancher代理,它会建立一个/var/lib/rancher文件夹并在其中存储一些信息。若是从新启动虚拟机,这些信息将被销毁。所以,当代理再次出现时,主机会认为它是一个新的服务器,以前的服务器信息在那时就所有丢失了。
幸运的是,面对这样的窘境有一个解决方法。在运行Rancher代理脚本日志到主机上以前,运行如下命令:
sudo mkdir /mnt/sda1/var/lib/rancher
这将建立一个文件夹,这个文件夹在从新启动时能被保留下来。如今,在每次启动时,我须要将此文件夹映射到/var/lib/rancher。所以,咱们须要再次编辑/var/lib/boot2docker/profile并添加如下内容:
sudo mkdir /var/lib/ranchersudo mount -r /mnt/sda1/var/lib/rancher /var/lib/rancher
这将确保咱们的代理状态在从新启动之间能被保留。
经过ssh协议链接到机器,并运行您从Rancher服务器得到的自定义代理字符串。
如今您已经有了一个Rancher服务器,它的主机彻底在本地运行,它的应用程序栈准备完毕等待您的部署。
在此,是否将它提升到一个新的水平取决于您本身。但如今,您有了一个可运转的Rancher / Docker环境。您可以从外部存储库拉取数据,编写脚本在本地构建应用程序或者运行目录中的条目。
虽然这种开发方式并不完美,但对于大多数状况来讲是“足够好”的了,而且这样的开发方式值得分析参考,并以此做为继续改进开发的方法。