天天看點

在阿裡雲容器服務中運作離線作業

目前在線上應用,尤其是無狀态的線上應用領域,docker容器已經成為執行層的事實标準,有大量雲服務商提供容器雲服務。但在離線計算領域,還很少有服務商提供這樣的能力。

但離線計算在實際生産中使用很廣,小到一個腳本任務,大到大資料分析;而且離線計算對資源隔離、環境隔離的需求更高,這正是docker容器的優勢。是以,阿裡雲容器服務抽象出離線計算的基本模型,推出了基于docker容器的離線計算功能。其核心功能是:

作業編排

作業排程與生命周期管理

存儲與日志等功能的內建

首先介紹一下離線計算的基本概念。下表中列出了離線與線上應用的概念對比。

概念

離線應用

線上應用

容器

任務執行單元

服務的執行單元

運作曆史

任務出錯重試的執行曆史

服務(任務)

一個特定的功能,可以分割成若幹個容器來執行

一組功能相同的容器

應用(作業)

若幹個任務的組合

若幹個服務的組合

簡言之,一個離線作業包含若幹個任務,每個任務可以由若幹個容器來執行,每個容器可以有多個運作曆史;而一個線上應用包含若幹個服務,每個服務可以有若幹個容器同時服務。

跟線上應用一樣,我們使用dockercompose來描述和編排作業。dockercompose支援docker的絕大部分功能,比如:

cpu、記憶體等資源限制

資料卷(volume)

環境變量與标簽

網絡模型、端口暴露等

除此之外,阿裡雲容器服務還擴充了以下功能:

容器數量:每個任務分成多少個容器

重試次數:每個容器重試多少次

移除容器:容器運作完後是否删除,可選政策是remove_finished(删除完成的容器)、remove_failed(删除失敗的容器)、remove_all(删除全部容器)、remove_none(不删除)

dag模型的任務依賴:同一個作業的任務之間可以有依賴關系,被依賴的任務會先執行。

下面是一個離線作業的dockercompose示例。

需要注意的幾點是:

隻支援version2的docker compose

需要在作業級别添加标簽<code>aliyun.project_type: "batch"</code>,沒有該标簽或标簽值不為batch則認為是線上應用

不管restart設定為什麼值,都會被修改為no

用<code>aliyun.depends</code>标簽指定依賴,可以依賴多個任務,用<code>,</code>分隔

<code>aliyun.retry_count</code>預設值為3

<code>aliyun.remove_containers</code>預設值為remove_finished

容器狀态由容器的運作及退出狀态決定;任務狀态由該任務中所有容器的狀态決定;作業狀态由該作業的所有任務決定。

運作中(running):容器在運作

完成(finished):容器退出且exitcode==0

失敗(failed):容器退出且exitcode!=0

運作中(running):有容器在運作

完成(finished):所有容器都完成了

失敗(failed):有容器失敗次數超過給定值

運作中(running):有任務在運作

完成(finished):所有任務都完成了

失敗(failed):有任務失敗了

上述狀态都可以通過api擷取,友善使用者自動化運維。

容器之間、任務之間會有資料共享和交換,共享存儲可以解決這一問題。比如hadoop上跑mr作業,是通過hdfs來交換資料的。在容器服務中,可以使用三類共享存儲,其特性及應用場景對比如下:

存儲

優點

缺點

适用範圍

ossfs資料卷

跨主機共享

讀寫、ls性能低;修改檔案會導緻檔案重寫

共享配置檔案;附件上傳

阿裡雲nas資料卷

跨主機共享;按需擴容; 高性能、高可靠性;挂載速度高

成本略高

需要共享資料的重io應用,如檔案伺服器等;需要快速遷移的重io應用,如資料庫等

使用者自己內建成三方存儲,如portworx

将叢集内的雲盤虛拟成共享的大磁盤;性能高;snapshot、多拷貝

需要一定運維能力

同nas

具體使用資料卷的幫助,可以參考下列文檔:

<a href="https://yq.aliyun.com/articles/7581">在阿裡雲容器服務上使用oss資料卷(volume)</a>

<a href="https://yq.aliyun.com/articles/52523">在阿裡雲容器服務中使用nas(nfs)資料卷</a>

<a href="https://yq.aliyun.com/articles/8307">用oss資料卷實作wordpress附件共享</a>

日志和監控是分析離線作業的重要工具。阿裡雲容器服務內建了阿裡雲sls與雲監控功能,隻要在編排模闆中添加一個标簽,就可以将日志收集到sls,将容器的cpu、記憶體等資料收集到雲監控。具體使用友善請參考下面的文檔,這裡不再細寫。

<a href="https://help.aliyun.com/document_detail/26036.html">內建日志服務</a>

<a href="https://help.aliyun.com/document_detail/32471.html">容器監控服務</a>

第二步,選擇應用-&gt;建立應用-&gt;使用模闆建立,填入上文中的編排模闆,并建立應用。

第三步,選擇應用-&gt;您的應用,可以檢視應用的運作狀态,如下圖所示。

在阿裡雲容器服務中運作離線作業