目前越来越多的企业正在尝试使用容器来构建他们的服务,他们或者在自己的本地数据中心搭建基于容器的集群,或者利用公有云来承载基于容器和微服务的集群架构,然而很多企业发现搭建一套能够适用于生产环境的容器集群并不是一件容易的事情。容器服务集群所带来的高密度和高复杂性的分布式运算使得传统的IT管理和运维手段变得非常的低效。
ACS是微软在2015年12月推出的一项基于容器的云端PaaS服务。ACS的诞生就是为了给企业提供一套经过优化的,可适用于生产环境的,配置简单的基于开源编排框架来简化企业部署容器集群的复杂程度。ACSengine是微软提供的一个“转换器”,用户只需要配置几个简单的参数来描述容器集群的规格,然后ACSengine就可以将这个“集群规格说明”文档转化成ARM模板来自动化地在Azure公有云上生成容器集群。
ACS完全基于开源组件,目前ACS支持主流的编排框架有:DC/OS,Swarm,Kubernetes。ACS engine也已经在GitHub上开源(https://github.com/azure/acs-engine),企业可以在任何的云平台使用并迁移这套容器服务,避免了对某个平台的耦合。有兴趣的朋友可以下载尝试。
DC/OS是一套企业级的容器编排框架,它不仅支持Docker镜像,同时也支持其他的镜像格式。DC/OS已经被很多著名的公司使用,包括Twitter,Apple,Yelp等等。AzureDC/OS是微软和Mesosphere公司联合开发的分布式容器解决方案。基于这套方案可以为企业带来很多的便利:
首先我们可以看一下acs engine的架构图(以DC/OS为例):
ACS engine是一个ARM模板生成器,通过acs engine我们可以将预先配置好的集群描述文件转化成一组ARM模板,然后通过azure提供的CLI命令,可以将这组模板部署到Azure上面。下面是一个DC/OS集群描述文件的例子:
{
"apiVersion": "vlabs",
"properties": {
"orchestratorProfile": {
"orchestratorType": "DCOS"
},
"masterProfile": {
"count": 1,
"dnsPrefix": "",
"vmSize": "Standard_D2_v2"
},
"agentPoolProfiles": [
{
"name": "agentprivate",
"count": 3,
"vmSize": "Standard_D2_v2"
},
{
"name": "agentpublic",
"count": 3,
"vmSize": "Standard_D2_v2",
"dnsPrefix": "",
……
"linuxProfile": {
"adminUsername": "azureuser",
"ssh": {
"publicKeys": [
{
"keyData": ""
}
……
其中几个比较关键的参数:
配置好以上几个参数后就可以使用acs engine来生成我们需要的ARM模板了,在生成模板之前,让我们看一下acs源码的大致目录结构,加深一下对acs engine的印象:
由于DC/OS在部署的过程中需要从Azure CDN上下载安装依赖,而由于国内防火墙的问题,Azure CDN目前在国内无法访问,所以我们需要手动修改一下dcosprovison.sh这个脚本,将安装依赖的选项修改到国内,这样安装过程才能顺利执行。具体的修改流程如下:
打开parts/dcosprovision.sh脚本:
#!/bin/bash
MESOSDIR=/var/lib/mesos/dl
mkdir $MESOSDIR
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/bootstrap.tar.xz https://dcosio.azureedge.net/dcos/testing/bootstrap/${BOOTSTRAP_ID}.bootstrap.tar.xz&
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/bootstrap.tar.xzhttps://az837203.vo.msecnd.net/dcos/testing/bootstrap/${BOOTSTRAP_ID}.bootstrap.tar.xz&
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/d.debhttps://az837203.vo.msecnd.net/dcos-deps/docker-engine_1.11.2-0~xenial_amd64.deb&
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/1.debhttps://az837203.vo.msecnd.net/dcos-deps/libipset3_6.29-1_amd64.deb &
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/2.debhttps://az837203.vo.msecnd.net/dcos-deps/ipset_6.29-1_amd64.deb &
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/3.debhttps://az837203.vo.msecnd.net/dcos-deps/unzip_6.0-20ubuntu1_amd64.deb &
curl -fLsSv --retry 20 -Y100000 -y 60 -o $MESOSDIR/4.debhttps://az837203.vo.msecnd.net/dcos-deps/libltdl7_2.4.6-0.1_amd64.deb &
wait
修改红色的部分为:
curl -fLsSv --retry 20 -Y 100000 -y 60-o $MESOSDIR/bootstrap.tar.xzhttp://acsengine.blob.core.chinacloudapi.cn/dcos/${BOOTSTRAP_ID}.bootstrap.tar.xz&
curl -fLsSv --retry 20 -Y 100000 -y 60-o $MESOSDIR/d.debhttp://acsengine.blob.core.chinacloudapi.cn/dcos/docker-engine_1.11.2-0~xenial_amd64.deb&
curl -fLsSv --retry 20 -Y 100000 -y 60-o $MESOSDIR/1.debhttp://acsengine.blob.core.chinacloudapi.cn/dcos/libipset3_6.29-1_amd64.deb&
curl -fLsSv --retry 20 -Y 100000 -y 60-o $MESOSDIR/2.debhttp://acsengine.blob.core.chinacloudapi.cn/dcos/ipset_6.29-1_amd64.deb &
curl -fLsSv --retry 20 -Y 100000 -y 60-o $MESOSDIR/3.debhttp://acsengine.blob.core.chinacloudapi.cn/dcos/unzip_6.0-20ubuntu1_amd64.deb&
curl -fLsSv --retry 20 -Y 100000 -y 60-o $MESOSDIR/4.debhttp://acsengine.blob.core.chinacloudapi.cn/dcos/libltdl7_2.4.6-0.1_amd64.deb&
修改过后我们就可以开始编译部署了。
Windows环境
安装软件
编译步骤
OS X/linux
2.编辑examples/dcos.json集群描述文件
打开examples/dcos.json,将空白处的masterProfile/dnsPrefix, agentPoolProfiles/dnsPrefix, ssh/publickeys/keydata分别填入相应的参数,例如:
{
"apiVersion": "vlabs",
"properties": {
"orchestratorProfile": {
"orchestratorType": "DCOS"
},
"masterProfile": {
"count": 1,
"dnsPrefix": "test-master1",
"vmSize": "Standard_D2_v2"
},
"agentPoolProfiles": [
{
"name": "agentprivate",
"count": 3,
"vmSize": "Standard_D2_v2"
},
{
"name": "agentpublic",
"count": 3,
"vmSize": "Standard_D2_v2",
"dnsPrefix": "test-agent1",
"ports": [
80,
443,
8080
]
}
],
"linuxProfile": {
"adminUsername": "azureuser",
"ssh": {
"publicKeys": [
{
"keyData":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx(SSH KEY)" ......
3.运行acsengine生成ARM模板
运行acs-engineexamples/dcos.json,相应的ARM模板就会在_output目录中生成,如下图:
azuredeploy.json是核心的ARM模板
azuredeploy.parameters.json是对应的配置参数
至此为止,aceengine的任务就圆满结束了,接下来就需要将生成好的ARM模板部署到Azure上面了。
4.利用Azure CLI命令部署DCOS集群
1) 登录Azure中国区
azure login –e AzureChinaCloud
2) 设置azurecli的模式为arm
azure config mode arm
3) 创建资源组(集群中的所有资源都会在这个资源组中创建)
azure group create --name="
4) 部署DCOS集群
azure group deployment create --name="
部署成功以后,访问azure.cn的门户预览界面,可以看到DCOS已经启动,这个集群具有一个master节点和两个vmss(虚拟机规模集)
1.在azure门户预览中,点击下图中红色框中的内容,在弹出的界面中拷贝masterFQDN,这个地址就是我们稍等要访问的地址.
2.打开terminal,执行以下命令创建一个ssh tunnel
sudo ssh -L 80:localhost:80-f -N <username>@<masterFQDN> -p 2200
username就是我们在集群描述文件中的adminUsername
masterFQDN就是刚才我们在门户预览中复制的地址
3.打开本地浏览器访问http://localhost,如果能显示下面的界面就表示已经创建成功了
4.如果我们想部署一个简单的hello-world容器服务的话,可以点选“Services”,然后点击“DeployService”
5.设置需要部署的服务的id为“helloworld”,然后点击“Container Settings”,在弹出的界面中设置需要部署的docker镜像的名称
6.点击“Deploy”后并部署成功后,点选“helloworld”服务,就可以查看部署的服务的详细信息了
具体的DCOS的使用细节可以参考其官方文档,这里就不多赘述了
通过上面的操作我们发现ACS确实是一大利器,能够最大限度地简化容器集群的部署和配置,用户只需要配置几个简单的集群描述参数就能迅速享受到容器化集群给生产环境带来的各种便利。同时因为本身架构是基于开源解决方案,用户可以很方便地将已经运行在本地数据中心的容器集群迁移到Azure上,也可以将Azure上的ACS服务迁移到别的数据中心,减少了服务和平台的耦合性,让用户享受便利的同时,免除了对平台耦合的顾虑,唯一美中不足的地方就是国内防火墙的存在对安装过程有些阻碍,目前笔者暂时先把这些依赖的组件放到了Azure的存储里面,笔者相信Azure在将来一定会有更加完善的CDN的解决方案来更加快速地帮着用户完成部署。