DCOS雲平臺之Marathon應用容器編排元件

jaymarco發表於2020-09-24

 

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章