容器技术是目前非常流行的技术,尤其是在以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

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

go get github.com/Azure/acs-engine

go get all

4.打开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

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

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

go build

./acs-engine

6.可以看到,如果要产生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"

}

]

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

./acs-engine examples/dcos.json

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

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

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

9.剩下的事情就比较好办了,使用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"

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

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

Auth配置:

Tunnel配置:

12.连接之后,打开你的浏览器,输入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部署

使用ARM模板在Azure中国大规模部署DCOS集群的更多相关文章

  1. 【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法

    问题描述 在参考文档"使用 GitHub Actions 部署 ARM 模板"一文中,由于是在中国区Azure上操作,所以生产的部署凭证为中国区凭证.当创建工作流时,在登录到Azu ...

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

    IPv6 在中国 - 大规模部署进行中 进展明显 2019年02月04日 08:21 3078 次阅读 稿源:solidot 0 条评论 中国有着世界上最大的网民人口,但它的 IPv6 普及度却处于世 ...

  3. 使用acs-engine在Azure中国区部署kubernetes集群详解

    转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7649642.html 1. acs-engine简介 ACS是微软在2015年12月推出的一项基于容器 ...

  4. Azure vm 扩展脚本自动部署Elasticsearch集群

    一.完整过程比较长,我仅给出Azure vm extension script 一键部署Elasticsearch集群的安装脚本,有需要的同学,可以邮件我,我给你完整的ARM Template 如果你 ...

  5. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群

    庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介      前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...

  6. MariaDB Galera Cluster 部署(如何快速部署MariaDB集群)

    MariaDB Galera Cluster 部署(如何快速部署MariaDB集群) [日期:--] 来源:Linux社区 作者:Linux [字体:大 中 小] MariaDB作为Mysql的一个分 ...

  7. 在CentOS7部署zookeeper集群以及简单API使用

    一.部署zookeeper集群 zookeeper是一个针对大型分布式系统的协调系统,提供的功能有统一名称服务.分布式同步等. 1.上传zk安装包 2.解压     tar -xzvf zookeep ...

  8. 二进制安装部署kubernetes集群---超详细教程

    本文收录在容器技术学习系列文章总目录 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建完成后整理的个人心得,分享给大家~~~ 本文所需的安装包,都上传在我的网盘中,需要的可以打赏博主一杯咖啡钱 ...

  9. 高可用Kubernetes集群-14. 部署Kubernetes集群性能监控平台

    参考文档: Github介绍:https://github.com/kubernetes/heapster Github yaml文件: https://github.com/kubernetes/h ...

随机推荐

  1. ac automaton 专题

    hdu2222 模板题 hdu2825 在ac自动机上的状压dp hdu3247 在ac自动机上bfs poj2778 求长度为n,不包含给定的m个字符串的任何一个的字符串的个数 其实就是求长度为n的 ...

  2. DLog 技巧

    #ifdef DEBUG#ifndef DLog# define DLog(fmt, ...) {NSLog((@"%s [Line %d] " fmt), __PRETTY_FU ...

  3. repo init 时gpg: 无法检查签名:找不到公钥

    i found a solution here: http://www.marshut.com/wrrts/repo-release-1-12-4.html Sorry, I realized tod ...

  4. Codeforce 219 div1

    B 4D"部分和"问题,相当于2D部分和的拓展,我是分解成2D部分和做的: f[x1][y1][x2][y2]=true/false 表示 左上(x1,y1) 右下(x2,y2)的 ...

  5. windows环境下nutch2.x 在eclipse中实现抓取数据存进mysql详细步骤

    nutch2.x 在eclipse中实现抓取数据存进mysql步骤 最近在研究nutch,花了几天时间,也遇到很多问题,最终结果还是成功了,在此记录,并给其他有兴趣的人提供参考,共同进步. 对nutc ...

  6. n%i之和

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1168 题意:给定一个n,注意这里n小于10^12,求 分析:早些时 ...

  7. c++命名空间using

    #include<iostream> namespace run1 { ; } namespace run2 { ; void show() { std::cout << x ...

  8. 去掉MySQL字段中的空格

    mysql replace 函数   语法:replace(object,search,replace)   意思:把object中出现search的全部替换为replace   案例: SQL Co ...

  9. 算法导论——lec 11 动态规划及应用

    和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的.分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解.与此不同,动态规划适用于子问题不是相互 ...

  10. git config配置文件 (共有三个配置文件)

    设置 git status的颜色. git config --global color.status auto 一.Git已经在你的系统中了,你会做一些事情来客户化你的Git环境.你只需要做这些设置一 ...