DCOS雲平臺之Marathon應用容器編排元件
1 前言
新炬DCOS雲平臺管理採用marathon容器應用編排框架作為底層元件。它搭建了以Docker容器為基礎封裝各類應用和執行環境,以Mesos、Marathon為核心實現容器資源的分散式排程與協調,並以Marathon-LB實現服務註冊和業務的引流。其中,Marathon作為DCOS雲平臺的核心元件,並結合MESOS的資源排程元件,實現DCOS雲平臺下任務的動態排程,針對Marathon這一核心元件,新炬DCOS小組進行了長期的研究和生產實踐,今天主要為大家分享Marathon簡介與實踐原理。
2 Marathon簡介
Marathon按照官方的說法是個它是基於Mesos框架的私有PaaS,它實現了Mesos的Framework。Marathon實現了服務發現和負載平衡、為部署提供REST API服務、授權和SSL、配置約束等功能。它還支援Shell命令和Docker部署應用。同時也提供Web UI介面、支援CPU,記憶體,儲存和例項個數等引數設定,支援單個應用的Scale,但不支援複雜的叢集定義。Marathon本身是透過Scale方式來實現的。
Marathon能夠支援執行長服務,比如Web應用等。Marathon能夠原樣執行任何Linux二進位制釋出版本,如Tomcat Play等。
Marathon具有容錯功能,當容器由於節點崩潰等原因意外停止執行時,Marathon會自動將容器排程到其他mesos slave節點。這一點類似程式管理工具Supervisor,當程式意外退出時,Supervisor會重啟程式。然而,自動容錯功能並不適合有狀態服務,即帶有資料卷(volume)的容器,例如Oracle與MySQL,對資料一致性要求很高,而且資料丟失面臨很大安全性問題。以至於資料很難跨節點移動,目前的技術還不夠成熟。因此,Marathon目前僅適合執行無狀態的服務,而資料庫等有狀態服務應該單獨部署。這樣做也可以提高資料的安全性。
3 Marathon原理與架構
Marathon元件可以為您的每個應用程式指定所需要的CPU,記憶體,儲存和程式執行的例項個數。它可以使用可用的叢集資源對失敗的任務自動做出響應。如果某個Mesos Slave節點當機或應用的某個例項退出、失敗,Marathon將會自動在mesos slave節點啟動一個新的例項,來替換掉失敗的例項。Marathon也允許使用者在部署時指定應用程式彼此間的依賴關係,這樣就可以保證某個應用程式例項不會在它依賴的資料庫例項啟動前啟動。
4 Marathon特性
l 高可用,支援多主節點(主備模式)自動切換。
l 支援多種容器環境。
l 支援有狀態服務,如資料庫。
l 使用Web管理介面用於配置操作和監控系統狀態。
l 約束規則,比如限制任務分佈在特定節點。
l 服務發現、負載均衡。
l 支援健康檢查,實現容錯。
l 支援事件訂閱,用於整合到其它系統。
l 執行指標監控介面。
l 完善易用的REST API,便於整合和編寫指令碼。
5 Marathon Rest API介面
新炬DCOS雲平臺呼叫marathon API介面
介面用途 |
方法 |
介面 |
獲取marathon服務狀態 |
GET |
/ping |
獲取marathon部署應用資訊 |
GET |
/v2/apps |
獲取應用ID應用部署資訊 |
GET |
/v2/apps/{id} |
獲取應用ID任務 |
GET |
/v2/apps/{id}/tasks |
重啟app_id應用 |
POST |
/v2/apps/{app_id}/restart |
獲取marathon作業資訊 |
GET |
/v2/tasks |
建立新的應用 |
POST |
/v2/apps |
更新應用 |
PUT |
/v2/apps/{app_id} |
強制更新應用 |
PUT |
/v2/apps/{app_id}?force=true |
刪除應用 |
DELETE |
/v2/apps/{id} |
強制刪除應用 |
DELETE |
/v2/apps/{id}?force=true |
建立一個空應用組 |
POST |
/v2/groups |
在應用組內更新應用 |
PUT |
/v2/groups/{id} |
在應用組內強制更新應用 |
PUT |
/v2/groups/{id}?force=true |
刪除應用組內的應用 |
DELETE |
/v2/groups/{id} |
強制刪除應用組內的應用 |
DELETE |
/v2/groups/{id}?force=true |
獲取應用資訊 |
GET |
/v2/groups/{id} |
獲取部署資訊 |
GET |
/v2/deployments |
刪除應用部署資訊 |
DELETE |
/v2/deployments/{deploymentId} |
強制刪除應用部署資訊 |
DELETE |
/v2/deployments/{deploymentId}?force=true |
獲取marathon佇列資訊 |
GET |
/v2/queue |
獲取marathon資訊 |
GET |
/v2/info |
6 Marathon 應用部署測試
下面我們在這裡做兩個小測試,一種是透過marathon元件呼叫mesos元件部署個nginx映象的Docker容器。另一種透過marathon api介面建立nginx容器。
6.1 透過marathon UI建立nginx應用
建立應用
首先準備應用定義檔案, 此檔案為JSON格式。定義了應用的名稱(id)、命令、資源(cpu、記憶體等)和例項數量等資訊。
建立應用定義檔案,使用json方式建立nginx容器
{ "cmd" : "nginx -g 'daemon off;'", "container" : { "docker" : { "image" : "XX.XX.XX.24/dcos/nginx:new", "network" : "BRIDGE", "portMappings" : [ { "containerPort" : 80, "hostPort" : 0 } ] }, "type" : "DOCKER" }, "cpus" : 0.2, "id" : "nginx", "mem" : 32.0 } |
登入在Web頁面上,點選建立Create Application按鈕。 彈出操作窗中,切換為JSON模式。
將 上一步準備的JSON內容複製到輸入框內,點選輸入框旁的建立Create Application按鈕儲存配置。 此時新建應用的資訊,將出現在Web頁面的應用列表。
檢視到marathon UI介面看到已經執行了兩個nginx的Docker容器
在後臺主機上可以看到marathon建立的nginx容器
現在你就可以透過來訪問到nginx。
6.2 使用Marathon API來建立nginx容器
首先準備應用定義檔案, 此檔案為JSON格式。定義了應用的名稱(id)、命令、資源(cpu、記憶體等)和例項數量等資訊。
建立應用定義檔案,使用json方式建立nginx容器,在後臺伺服器上定義一個nginx.json檔案。
{ "cmd" : "nginx -g 'daemon off;'", "container" : { "docker" : { "image" : "xx.xx.xx.24/dcos/nginx:new", "network" : "BRIDGE", "portMappings" : [ { "containerPort" : 80, "hostPort" : 0 } ] }, "type" : "DOCKER" }, "cpus" : 0.2, "id" : "nginx-1", "mem" : 32.0, "instances" : 2 } |
透過API在Marathon上建立任務
curl -X POST -H "Content-Type: application/json" http://{marathon_ip}:8080/v2/apps
在Marathon頁面確認容器已經啟動
此時看到marathon UI介面啟動了兩個nginx容器。
在後臺主機節點確認容器已經正常啟動
7 參考文件
8 總結
使用Marathon REST API介面並整合到DCOS雲平臺,實現自動化運維功能,解決了運維人員的應用部署慢、灰度釋出和水平彈性擴縮容等問題。隨著越來越多企業開始搭建部署自己的私有云、資料中心化管控以及應用容器化趨勢,同時也是為了減輕應用工作負載,節省資源成本,以及更好的提升業務系統運營效率,這種運維能力將變得愈發重要。後續我們的目標是要讓上雲後的多種型別的業務系統執行在共享資源上面發揮更好、更理想的實際效果。
有需要的朋友可以關注我的公眾號,文章每日一更
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2723798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DCOS雲平臺之應用容器化改造規範
- DCOS雲平臺之業務多應用部署改造方案
- 編排的藝術|K8S中的容器編排和應用編排K8S
- 對比剖析Swarm Kubernetes Marathon編排引擎Swarm
- 解讀Karmada多雲容器編排技術,加速分散式雲原生應用升級分散式
- 容器雲平臺監控告警體系(四)—— Golang應用接入PrometheusGolangPrometheus
- 多雲容器編排 Karmada-Operator 實踐
- Karmada: 雲原生多雲容器編排平臺
- 城商行容器雲平臺應用場景及持久化儲存實踐持久化
- Docker批量容器編排Docker
- 1.09 容器編排Kubernetes
- 容器、容器雲和容器化PaaS平臺之間究竟是什麼關係?
- 上雲利器,K8S應用編排設計器之快到極致K8S
- 容器編排系統之Kubernetes基礎入門
- 42_Docker容器編排Docker
- Kubernetes – 容器編排簡介
- 1.07 容器編排docker SwarmDockerSwarm
- SUSE 為雲原生、容器化應用提供多模架構平臺,助力企業 IT 轉型架構
- 容器編排系統之ReplicaSet和Deployment控制器
- 容器編排系統之Kubectl工具的基礎使用
- 容器編排系統K8s之Dashboard部署K8S
- Karmada 多雲容器編排引擎支援多排程組,助力成本最佳化
- 容器平臺
- Docker 容器編排利器 Docker ComposeDocker
- Docker 多容器編排Swarm(六)DockerSwarm
- 容器編排系統K8s之HPA資源K8S
- 容器編排系統之DaemonSet、Job和CronJob控制器
- 容器編排系統k8s之Service資源K8S
- 容器編排系統K8s之NetworkPolicy資源K8S
- 容器編排系統K8s之APIService資源K8SAPI
- 容器編排系統K8s之crd資源K8S
- 用友雲平臺,真正的雲原生架構,加速雲應用落地架構
- 企業容器雲管理平臺選型指南
- 容器雲平臺物理叢集配置實踐
- 容器雲平臺如何做好安全隔離?
- 深度解讀華為雲智慧企業雲應用平臺
- 【雲管平臺】多雲混合雲管理平臺用哪個好?
- API服務平臺,RestCloud視覺化流程編排APIRESTCloud視覺化