使用ARM模板在Azure中国大规模部署DC/OS集群

容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的。

Azure在去年就推出了容器服务ACS,以其对开源的全面兼容性,开放性,最全面的编排器(DC/OS, Kubernetes,Swarm)支持而广受好评,但在中国和很多地区,ACS并没有上线,如何在这些地区快速大规模部署容器服务一直是个问题。

而微软更进一步,在11月初,进一步开源了ACS的核心引擎acs-engine,让开发人员可以通过acs-engine快速的生成可以在所有地区当然包括中国部署的ARM模板,并且并不依赖于ACS Container resource provider,对于广大开发和维护人员来说是一大喜讯,不必像我一样为了在Azure中国上部署DC/OS cluster而辛苦调试修改脚本和ARM模板了:)

新闻:http://www.forbes.com/sites/janakirammsv/2016/11/07/microsoft-open-sources-azure-container-service-adds-support-for-kubernetes/#48e955d270ad

Acs-engine官方地址:https://github.com/Azure/acs-engine

很多牛人已经写了一些非常棒的acs-engine的文章,本文是按照我实际测试整理而成的,将碰到的一些问题,解决办法等记录下来,希望对于大家快速部署有所帮助。

首先简单了解一下本次DC/OS集群的部署架构图,我们有一个master的高可用集,master可以选择1,3,5台虚拟机;有一个public agent的VMSS集合主要部署面向互联网用户访问的应用;一个private agent的VMSS,无法公网访问,运行一些默认的计算:

安装配置acs-engine

  1. 在Go语言官网下载适合你的操作系统的安装包,例如Ubuntu下载安装go 语言包:

    wget https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gz

    官网地址:https://golang.org/dl/

  2. Linux下在你的用户目录下建立一个子目录gopath,并且添加如下行到你的$HOME/.profile文件:

export PATH=$PATH:/usr/local/go/bin

export GOPATH=$HOME/gopath

  1. 进入你的gopath目录,下载acs-engine并更新相关组件:

    go get github.com/Azure/acs-engine

    go get all

  2. 打开parts下的dcosprovision.sh文件,你可以看到很多包都需要从国外下载,由于GFW的原因,你的安装会变得非常缓慢,或者失败,首先下载下述包到你的本地服务器,建立镜像:

    从以下地址:

    https://dcosio.azureedge.net/dcos/testing/bootstrap

    https://az837203.vo.msecnd.net/dcos-deps

    下载下面的包到你的中国的镜像服务器:

5b4aa43610c57ee1d60b4aa0751a1fb75824c083.bootstrap.tar.xz(约551M)

docker-engine_1.11.2-0~xenial_amd64.deb

ipset_6.29-1_amd64.deb

libipset3_6.29-1_amd64.deb

libltdl7_2.4.6-0.1_amd64.deb

unzip_6.0-20ubuntu1_amd64.deb

  1. 进入到你的acs-engine根目录,build你的acs-engine:

    cd $GOPATH/src/github.com/Azure/acs-engine

    go build

    ./acs-engine

  2. 可以看到,如果要产生json模版,你需要的是一个ClusterDefinitionFile,在example下有各种例子文件,我们以dcos为例,可以看到,编辑example/dcos.json,修改如下红色部分并保存:

    "masterProfile": {

    "count": 1,

    "dnsPrefix": "dcosmaterdemo",

    "vmSize": "Standard_D2"

    },

    {

    "name": "agentpublic",

    "count": 3,

    "vmSize": "Standard_D2",

    "dnsPrefix": "dcosagentdemo",

    "ports": [

    80,

    443,

    8080

    ]

    }

    "publicKeys": [

    {

    "keyData": "YOURKEY"

    }

    ]

  3. 运行acs-engine,产生你的ARM template

    ./acs-engine examples/dcos.json

  4. 这一步很重要,需要你手工打开生成的azuredeploy.json文件,修改下面的CDN下载源为你的中国镜像地址,否则你的部署会失败:

    https://dcosio.azureedge.net/dcos/testing/bootstrap

    https://az837203.vo.msecnd.net/dcos-deps

  5. 剩下的事情就比较好办了,使用Azure CLI来部署你的DC/OS集群:

    #使用Azure CLI登陆中国的Azure:

    azure login -u USERNAME -p PASSWORD -e AzureChinaCloud

    #创建resource group:

    azure group create --name="stevenacsdcosgp" --location="China East"

    #执行部署:

    azure group deployment create --name="mydcoschinadeploy" --resource-group="stevenacsdcosgp" --template-file="./_output/DCOS184-10726092/azuredeploy.json" --parameters-file="./_output/DCOS184-10726092/azuredeploy.parameters.json"

  6. 部署完成后,你可以在新的portal里面看到部署成功信息,在我的实际环境里面部署,整个过程只需要8分多种,请记录下下图黄色高亮显示的master地址:

  7. 然后我们需要连接到dc/os的集群,使用上图中的masterQFDN地址,端口为2200,使用你的private key file(ppk文件),建立tunnel端口为80,进行连接:

    Auth配置:

    Tunnel配置:

  8. 连接之后,打开你的浏览器,输入http://localhost/,看到如下DC/OS的dashboard,你就可以愉快的和Docker,DC/OS玩耍了:

TIPS:如果你碰巧很不幸,配置SSH Tunnel的时候,无法链接,检查putty event log,看到Permission Denied错误,我已经找到了解决办法,为节约你的时间,请按照如下方法执行:

检查netstat -aon | findstr "80"

你会看到有一些服务会使用ntoskrnl占用80端口,比如ws-Management导致本地tunnel失败:

net stop http

从上述文档可以看出,利用acs-engine可以非常方便的生成适用于中国Azure大规模部署的ARM模板,但其实有了这个模板,简单修改参数,就可以重复部署了,没必要每次都生成,所以我把生成好的模板已经放到了Github上,想在中国部署的同学:

https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/mesos-marathon-vmss-china

  1. 克隆或者下载当前所有文件
  2. 修改azuredeploy.json中的http://YOURCHINASERVER为你自己的服务器,
  3. 修改azuredeploy.parameters.json中的所有标为CHANGIT的地方
  4. 修改deploy.ps1文件中deployName作为你的资源组名称
  5. 登陆你的Azure账户,使用ARM模式,执行deploy.ps1部署
  6. Linux和Mac用户也可以使用Azure CLI部署
时间: 2024-10-18 22:10:49

使用ARM模板在Azure中国大规模部署DC/OS集群的相关文章

使用ARM模板在Azure中国大规模部署DCOS集群

容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的. Azure在去年就推出了容器服务ACS,以其对开源的全面兼容性,开放性,最全面的编排器(DC/OS, Kubernetes,Swarm)支持而广受好评,但在中国和很多地区,ACS并没有上线,如何在这些地区快速大规模部署容器服务一直是个问题. 而微软更进一步,在11月初,进一步开源了ACS的核心引擎ac

[CB]IPv6 在中国 - 大规模部署进行中 进展明显

IPv6 在中国 - 大规模部署进行中 进展明显 2019年02月04日 08:21 3078 次阅读 稿源:solidot 0 条评论 中国有着世界上最大的网民人口,但它的 IPv6 普及度却处于世界最低之列,印度的 IPv6 普及度高达六成,而中国只有 3%-5%.中国有 7.41 亿网民,而它的 IPv4 地址数有大约 3.01 亿,通过 NAT 分享公共 IP,考虑到设备数量,平均每个公共 IPv4 地址有 3 个设备使用.IPv4 地址空间已经枯竭,不再可能继续扩充,因此中国 ISP 

在 Azure 虚拟机上快速搭建 MongoDB 集群

MongoDB 是目前在 NoSQL 市场上非常受欢迎的一个数据库,本文介绍如何使用 Azure PowerShell 和 Azure CLI 在 Azure 虚拟机上搭建单节点 MongoDB(测试使用)和包含主从复制以及分片集群的多节点 MongoDB(生产环境使用). 准备步骤 如果你选择 Azure PowerShell 方式搭建 MongoDB,那么请按如何安装和配置 Azure PowerShell中的说明在本地计算机上安装 Azure PowerShell.然后打开 Azure P

部署Hadoop高性能集群

部署Hadoop高性能集群 服务器概述 1)Hadoop是什么 Hadoop是Lucene创始人Doug Cutting,根据Google的相关内容山寨出来的分布式文件系统和对海量数据进行分析计算的基础框架系统,其中包含MapReduce程序,hdfs系统等. Hadoop包括两大核心,分布式存储系统和分布式计算系统. 2)分布式存储 为什么数据需要存储在分布式的系统中哪,难道单一的计算机存储不了吗,难道现在的几个TB的硬盘装不下这些数据吗?事实上,确实装不下.比如,很多的电信通话记彔就存储在很

手把手教你用Docker部署一个MongoDB集群

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的.支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引.本文介绍了如何使用Docker搭建MongoDB集群. 本文我会向大家介绍如何使用Docker部署一个MongoDB集群,具体如下: 2.6.5版本的MongoDB 有3个节点的副本集(Replica set) 身份验证 持久化数据到本地文件系统 首先要准备三个运行的Docker服务器,这意味着你

将java开发的wordcount程序部署到spark集群上运行

1 package cn.spark.study.core; 2 3 import java.util.Arrays; 4 5 import org.apache.spark.SparkConf; 6 import org.apache.spark.api.java.JavaPairRDD; 7 import org.apache.spark.api.java.JavaRDD; 8 import org.apache.spark.api.java.JavaSparkContext; 9 impo

docker 部署nginx+weblogic集群

测试一段时间,再来报告 docker 部署nginx+weblogic集群

Mongodb 部署一个分片集群

根据下面的任务顺序来部署一个分片集群: 警告 分片和"localhost"地址 如果你使用"localhost"或者是127.0.0.1 作为任一节点标识的主机名部分,例如addShard 方法的host 参数或者是运行时操作 --configdb的值,那么你必须为集群中的所有MongoDB的所有节点设置都使用"localhost"或者是127.0.0.1.如果你把本地地址和远程地址混合使用的话,MongoDB将会出现错误. 启动Config S

Kubernetes 通过statefulset部署redis cluster集群

Kubernetes 通过statefulset部署redis cluster集群 作者: 张首富 时间: 2019-02-19 个人博客地址: https://www.zhangshoufu.com QQ群: 895291458 需要有redis基础 Redis集群架构图 每个Mater 都可以拥有多个slave.当Master掉线后,redis cluster集群会从多个Slave中选举出来一个新的Matser作为代替,而旧的Master重新上线后变成 Master 的Slave. 部署re