CloudFoundry是一個提供誇平臺、多語言應用框架的開源PaaS,可運行於私有云和公有云。php
組件:java
buildpack:即構建包,爲應用提供framework和runtime,如binary、go、java、php、ruby、pythond等。python
manifest:cf push部署應用時會用默認的實例數、硬盤空間限制和內存限制。若你想用指定的配置來覆蓋默認配置,可將鍵值對存放於manifest文件。算法
org:賦予開發帳號不一樣的權限後端
space:應用和服務運行的特定空間,org可包含多個spaceapi
user account:一個org中的用戶帳號對不一樣的space擁有不一樣的訪問權限安全
quta plan:即memory、service和instance使用配額ruby
domain:每一個cloud foundry實例都有一個默認域,從域建立的任何請求將被路由到cf的負載均衡IP地址服務器
route:CF gorouter經過將應用和地址相關聯來路由請求,即映射。可用cf routes查看併發
services:cloud foundry提供一個服務市場,cf marketplace查看,這裏可將service看作提供服務實例的工廠
Application Security Groups(ASGs):應用安全組,至關於防火牆,對特定協議、端口、IP範圍作的出口規則
Cloud Foundry結構圖
圖中組件:
Router: 對request進行路由並負載均衡,按期查詢diego bbs以肯定應用當前運行的vm,根據其IP和端口作路由
UAA:登陸服務器身份認證
Cloud Controller控制應用和進程運行於VMs,根據需求管理應用的生命週期
cloud controller and diego brain: cc經過cc-bridge指導diego brain應用部署,維護orgs/space/user roles/services等的記錄
nsync,bbs,cell repo:三者一塊工做組成工做鏈,保證應用可用:nsync從cloud controller接受擴展app的消息,將需求實例數存儲到diego bbs db;bbs用聚合進程監控需求實例數和實際數,經過kill或launch應用實例讓兩者匹配;cell rep監控容器和實際實例數。
blobstore:二進制文件的倉庫,包括application code packages,buildpacks,droplets,現實中對應阿里雲的oss或aws的S3
diego cell:應用實例、任務做爲garden容器運行於diego dell vms。diego cell管理這些容器的生命週期,並上報運行之上的應用狀態給Diego bbs,傳遞日誌給loggregator。
service brokers: 服務代理,爲服務實例提供代理,如database,第三方SaaS。
diego是一個自愈的容器管理系統,保證運行任務和long-runging processes(LRP)於VM的數量來保障高可用。這裏CF有兩個種類型的VM:一種是CF組件VM,一種是運行app的VM。
當在CF上部署應用時,diego處理流程
1,CC發送請求給BBS API
2,BBS聯繫拍賣師基於LRP需求的資源建立拍賣,rep接受拍賣請求
3,rep根據請求,經過garden API建立container並運行task和LRP
4,converger按期分析系統狀態的快照並糾正差別,確保實例數量和diego保持一致
5,容器上的metron agent實時發送task和LRP的日誌給loggregator system,route-emmitter註冊LRP實例給Gorouter,以接收路由過來的外部訪問
Diego cell的組件
rep:保持Locket中cell的存在記錄
參與拍賣以接收task和LRP實例,建立容器並運行
對容器事件及時處理,確保bbs中的任務和Actual LRP與cell上實際存在的容器同步
針對cell上的資源約束管理容器分配
經過metron-agent按期收集日誌併發送給Loggregator系統
garden:提供獨立於平臺的服務端和客戶端來管理容器,定義建立和管理容器的API
metron-agent:轉發應用日誌、錯誤和其餘度量值給Loggregator
route-emitter:監控需求LRP和實際LRP狀態,按期發送路由註冊和註銷信息給Gorouter
diego brain:有所謂的拍賣師組成,根據拍賣算法分發task和LRP給diego cells,鎖定Locket以確保一次只有一個拍賣師處理拍賣,拍賣信息經過HTTPS在Auctioneer和cell reps之間發送,適時糾正實際和指望實例數量的差別,以確保容錯和一致性。
bbs:維護diego cluster的實時狀態,確保Locket只有一個活動狀態的bbs,按期比對指望LRP和實際LRP並強制執行保證一致;重發等待太長的拍賣請求和完成過長執行的回調
cc-bridge:將CC的請求翻譯給bbs
Locket:提供抽象鎖和服務註冊,依賴後端SQL實現永久性,存在於database vm
tasks:有限時間內運行一次
LRP:long Running Processes,持續運行無限時間,直到被stop or kill, or crash.
經常使用的cf命令
cf api 查看api url
cf login admin 登陸
cf login -a api_url --skip-ssl-validation
輸入用戶名,密碼 登陸
cf create-org testorg 建立org
cf org-users testspace 查看org對應的用戶權限
cf create-space testspace 建立space
cf switch-space testspace 登陸到本身的space
cf target -s testspace 進入空間
cf create-user cdc 123456 建立空間用戶
cf set-space-role cdc testorg testspace SpaceDeveloper
cf push myapp 在testspace發佈應用
cf apps查看應用
cf app myapp查看應用詳細信息
cf env myapp查看應用事件
cf logs myapp --recent 查看應用日誌
cf delete myapp -f 強制刪除應用
cf restart msapp 關閉應用,刷新環境設置後啓應用
cf restage myapp 關閉應用,從新編譯構建droplet後啓動
cf services 查看服務
cf routes 查看路由
cf domains 查看域名
cf spaces 查看空間
cf orgs 查看org
cf部署應用流程:
1,上傳和存儲應用文件
2,檢查並存儲應用元數據
3,爲應用程序建立"droplet"(CF的執行單元)
4,選擇合適的Diego cell來運行droplet
5,啓動應用程序
droplet就是一個包,包含stack、buildpack、app source code。diego cell解壓droplet包後編譯,隨即運行droplet於容器