容器技術是目前很是流行的技術,尤爲是在以Docker做爲容器引擎的推進下,讓容器的輕量級,可移植,自包含,隔離性等的上了一個新的臺階,目前談及Dev/Ops,CI/CD不多可以繞過Docker的。linux
Azure在去年就推出了容器服務ACS,以其對開源的全面兼容性,開放性,最全面的編排器(DC/OS, Kubernetes,Swarm)支持而廣受好評,但在中國和不少地區,ACS並無上線,如何在這些地區快速大規模部署容器服務一直是個問題。git
而微軟更進一步,在11月初,進一步開源了ACS的核心引擎acs-engine,讓開發人員能夠經過acs-engine快速的生成能夠在全部地區固然包括中國部署的ARM模板,而且並不依賴於ACS Container resource provider,對於廣大開發和維護人員來講是一大喜訊,沒必要像我同樣爲了在Azure中國上部署DC/OS cluster而辛苦調試修改腳本和ARM模板了:)github
新聞:http://www.forbes.com/sites/janakirammsv/2016/11/07/microsoft-open-sources-azure-container-service-adds-support-for-kubernetes/#48e955d270adgolang
Acs-engine官方地址:https://github.com/Azure/acs-enginedocker
不少牛人已經寫了一些很是棒的acs-engine的文章,本文是按照我實際測試整理而成的,將碰到的一些問題,解決辦法等記錄下來,但願對於你們快速部署有所幫助。json
首先簡單瞭解一下本次DC/OS集羣的部署架構圖,咱們有一個master的高可用集,master能夠選擇1,3,5臺虛擬機;有一個public agent的VMSS集合主要部署面向互聯網用戶訪問的應用;一個private agent的VMSS,沒法公網訪問,運行一些默認的計算:bootstrap
在Go語言官網下載適合你的操做系統的安裝包,例如Ubuntu下載安裝go 語言包:ubuntu
wget https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gzapi
官網地址:https://golang.org/dl/瀏覽器
Linux下在你的用戶目錄下創建一個子目錄gopath,而且添加以下行到你的$HOME/.profile文件:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/gopath
進入你的gopath目錄,下載acs-engine並更新相關組件:
go get github.com/Azure/acs-engine
go get all
打開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
進入到你的acs-engine根目錄,build你的acs-engine:
cd $GOPATH/src/github.com/Azure/acs-engine
go build
./acs-engine
能夠看到,若是要產生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"
}
]
運行acs-engine,產生你的ARM template
./acs-engine examples/dcos.json
這一步很重要,須要你手工打開生成的azuredeploy.json文件,修改下面的CDN下載源爲你的中國鏡像地址,不然你的部署會失敗:
https://dcosio.azureedge.net/dcos/testing/bootstrap
https://az837203.vo.msecnd.net/dcos-deps
剩下的事情就比較好辦了,使用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"
部署完成後,你能夠在新的portal裏面看到部署成功信息,在個人實際環境裏面部署,整個過程只須要8分多種,請記錄下下圖×××高亮顯示的master地址:
而後咱們須要鏈接到dc/os的集羣,使用上圖中的masterQFDN地址,端口爲2200,使用你的private key file(ppk文件),創建tunnel端口爲80,進行鏈接:
Auth配置:
Tunnel配置:
鏈接以後,打開你的瀏覽器,輸入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失敗:
從上述文檔能夠看出,利用acs-engine能夠很是方便的生成適用於中國Azure大規模部署的ARM模板,但其實有了這個模板,簡單修改參數,就能夠重複部署了,不必每次都生成,因此我把生成好的模板已經放到了Github上,想在中國部署的同窗:
https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/mesos-marathon-vmss-china
修改azuredeploy.json中的http://YOURCHINASERVER爲你本身的服務器,
修改azuredeploy.parameters.json中的全部標爲CHANGIT的地方
修改deploy.ps1文件中deployName做爲你的資源組名稱
登錄你的Azure帳戶,使用ARM模式,執行deploy.ps1部署
Linux和Mac用戶也可使用Azure CLI部署