cloud foundry是業界第一個開源的paas,号稱工業界唯一的雲應用平台。
本文重點講述cloud foundry在阿裡雲上的部署方案,對于cloud foundry介紹的部分簡單略過。
關鍵詞:paas、開源
cloud foundry是一種平台即服務(paas),相容多種基礎設施雲,提供多種開發架構和應用服務。目前開源支援部署cloud foundry的基礎設施雲包括aws、azure、openstack等等,cf在開發架構上支援java、.net、ruby等等,有很強的靈活性。
iaas幫助開發者和客戶解決了基礎設施的問題,cloud foundry作為paas,在雲上讓開發者的視角更高,開發者隻需要關注應用和資料。
cloud foundry是由相對獨立的多個子產品構成的分布式系統,每個子產品單獨存在和運作,各子產品之間通過消息機制進行通信。
cloud foundry目前最新的架構為v3版本,各個元件的功能,官網有詳細的介紹,這邊不再贅述。
(本文使用軟體版本和環境的說明,涉及到的概念下文會詳細解釋)
阿裡雲region:華東1
ruby 版本:2.3.0
bosh-init 版本:0.0.96
bosh cli 版本:1.3262.4.0
cf cli 版本:6.21.0
在阿裡雲上部署cloud foundry,部署流程分為三大部分,分别為:
開通阿裡雲環境資源:包括準備阿裡雲賬号,開通相關雲産品資源等等
部署bosh:安裝bosh-init,使用bosh-init部署bosh
部署cloud foundry:使用bosh部署cloud foundry
本文後續内容會根據三步部署流程詳細講述。
cloud foundry需要部署在vpc環境下,需要開通vpc資源,并建立虛拟交換機,規劃好部署cloud foundry的内網網段。
同時,也需要建立一對access key id和access key secret,也可以使用現有的access key id和access key secret對。
網段沒有限制,筆者選擇了10.0.0./8網段
可用區和網段沒有限制,友善起見,筆者選擇了華東1可用區e,網段為10.0.0.0/25
bosh是一個統一了平台即服務軟體(如cloud foundry)的釋出、部署和生命周期管理的自動化配置部署工具。簡單的說,bosh的作用之一就是部署cloud foundry,部署cloud foundry之前,首先要部署bosh。
在講怎麼在阿裡雲上部署bosh之前,首先需要了解bosh中的幾個基本概念。
cpi全稱cloud platform interface,是bosh對外開放的一組标準化接口,在iaas上部署bosh,需要實作這組接口,bosh用cpi對iaas的資源進行管理,包括建立虛拟機,釋放虛拟機,等等......
在阿裡雲上部署bosh,需要用阿裡雲openapi實作cpi。
cpi api v1完整接口清單:
bosh-init是bosh官網提供的一個開源工具,它的作用就是用來部署bosh。
stemcell是虛拟機鏡像,預裝了部署過程中需要的元件(其中最重要的元件是bosh agent),官方的描述是:a stemcell is a versioned operating system image wrapped with iaas specific packaging. bosh用cpi建立的虛拟機,用stemcell鏡像啟動。
release是bosh中一個安裝部署包的概念,包含了所有安裝分布式系統需要的源代碼、配置檔案、腳本檔案等等,官網描述為:a release is a versioned collection of configuration properties, configuration templates, start up scripts, source code, binary artifacts, and anything else required to build and deploy software in a reproducible way.
例如,安裝bosh,我需要一個bosh-release;用bosh安裝cloud foundry,我需要一個cf-release。
所有release都有版本疊代,都可以在bosh官網找到。
一個deployment是一組vm的集合,由指定的stemcell鏡像啟動,用于部署對應release的系統。官方描述為:a deployment is a collection of vms, built from a stemcell, that has been populated with specific releases and disks that keep persistent data. these resources are created based on a manifest file in the iaas and managed by the bosh director, a centralized management server.
在bosh的概念裡,一個deployment對應一個release,deployment的具體配置,寫在deployment manifest裡,在部署過程中提供。
通過阿裡雲控制台建立一個ecs(包年包月、按量均可),用于安裝bosh-init。友善起見,下文以bosh-init指代這台ecs。
推薦配置:
規格:2核4g及以上
鏡像:ubuntu 14.04 64位
系統盤:40gb以上,高效雲盤
網絡類型:vpc執行個體,選擇在上一步建立好的vpc和虛拟交換機,公網ip可以選擇不配置設定。
因為bosh-init是vpc執行個體,需要給bosh-init綁定彈性公網ip,讓bosh-init可以通過公網通路。
按需購買彈性公網ip,并給bosh-init綁定彈性公網ip
ssh登陸到bosh-init這台ecs
執行權限
<code>chmod +x ~/downloads/bosh-init-*</code>
移動到/usr/local/bin
<code>sudo mv ~/downloads/bosh-init-* /usr/local/bin/bosh-init</code>
驗證安裝成功
<code>bosh-init -v</code>
安裝對應環境,筆者使用的是ubuntu的機器
<code>sudo apt-get install -y build-essential zlibc zlib1g-dev ruby ruby-dev openssl libxslt-dev libxml2-dev libssl-dev libreadline6 libreadline6-dev libyaml-dev libsqlite3-dev sqlite3</code>
確定已經安裝ruby 2+環境
bosh-release是開源的,可以從bosh官網下載下傳:
<a href="https://bosh.io/releases/github.com/cloudfoundry/bosh?all=1">https://bosh.io/releases/github.com/cloudfoundry/bosh?all=1</a>
筆者使用的是255.3版本的bosh-release
cpi近期會開源,請關注:
<a href="https://github.com/alibaba/opstools">https://github.com/alibaba/opstools</a>
根據以下模闆,建立一個manifest檔案bosh.yml,在模闆中填充阿裡雲資源相關的内容。
執行部署指令:
<code>bosh-init deploy bosh.yml</code>
一個部署過程的示例:
我們用bosh cli驗證bosh是否部署成功。
bosh cli是bosh官方提供的,用于和bosh互動的指令行工具。在部署完成bosh之後,用bosh cli和bosh互動,執行相關指令,進行下一步cloud foundry的部署。
bosh cli可以安裝在任意一台ecs上,或者本地主機上。
執行bosh cli指令:
<code>bosh target 10.0.0.2</code>
筆者的bosh cli安裝在同一個安全組的ecs上,是以可以和部署bosh的ecs進行内網通訊,直接通過内網ip,target到bosh。如果需要通過公網通訊,需要給部署bosh的ecs綁定彈性公網ip,或者使用nat網關産品,保證網絡能通。
如圖顯示,成功連接配接到目标bosh,驗證bosh成功。
<code>bosh releases</code>、<code>bosh stemcells</code>這兩條指令,使用bosh部署cloud foundry的時候會用到,我們下節細講。
首先我們也需要了解用bosh部署cloud foundry過程中的幾個基本概念。
上一節講到,我們需要使用已經部署成功的bosh來部署cloud foundry,通過bosh cli和bosh進行互動,執行相關部署指令。是以,使用bosh部署cloud foundry之前,首先需要了解bosh cli指令的使用。
bosh cli幾個基本指令:
1.連接配接到指定bosh
<code>bosh target [director_url]</code>
2.列出目前release倉庫中所有的release
<code>bosh releases</code>
3.上傳release到bosh的release倉庫,隻有倉庫裡的release可以用于部署
<code>bosh upload release [release_file]</code>
4.列出目前stemcell倉庫裡的所有stemcell
<code>bosh stemcells</code>
5.上傳stemcell到bosh的stemcell倉庫,隻有倉庫裡的stemcell可以用于部署
<code>bosh upload stemcell stemcell_path</code>
<code>bosh upload stemcell stemcell_url</code>
6.列出目前所有的deployment
<code>bosh deployments</code>
7.列出目前deployment的資訊
<code>bosh deployment</code>
8.切換到指定manifest對應的deployment
<code>bosh deployment [manifest_path]</code>
9.執行部署目前deployment
<code>bosh deploy</code>
在上一步部署bosh中,已經部署好的bosh中已經包含了cpi元件,是以在部署cloud foundry中不再需要cpi-release
和上一步部署bosh中類似。
cloud foundry官網提供的壓縮包,包含cloud foundry所有元件的源碼。
deployment的配置檔案,主要描述了用哪個stemcell,用哪個cf-release,需要部署哪些cf元件,需要多少vm,vm規格資訊,vm的ip資訊,具體哪個vm部署哪個cf元件,等等......
cf-release是開源的,可以從bosh官網下載下傳:
<a href="http://bosh.io/releases/github.com/cloudfoundry/cf-release?all=1">http://bosh.io/releases/github.com/cloudfoundry/cf-release?all=1</a>
筆者部署用的是215版本的cf-release
我們需要用bosh cli和bosh進行互動,執行部署cloud foundry指令
上傳下載下傳完成的cf-release,執行以下bosh cli指令:
<code>bosh upload release <release_file></code>
根據以下模闆,建立一個manifest檔案cf.yml,在模闆中填充阿裡雲資源相關的内容。
<code>bosh deployment cf.yml</code>
部署完成之後,執行以下指令,檢視cloud foundry部署詳情:
<code>bosh vms</code>
至此,cloud foundry在阿裡雲上部署成功。