深度分析品高云V7.0
01 彈性容器服務
一、微服務誕生與容器的結合
單體架構與微服務架構的區別
傳統軟件架構特性是單體應用,開發周期至少以月為單位進行發布和升級,代碼一般使用一種語言開發,不同的組件緊耦合,經常依賴于公共的庫,從開發到運維的工作流程中,由于基礎環境的不一致造成了諸多問題,部署周期以月為單位,部署依賴人工操作,組件版本復雜,不利于持續性開發,操作風險高。
面對傳統單體軟件架構的劣勢,微服務架構(MSA)架構概念應運而生,通過將功能分解到各個離散的服務中以實現對解決方案的解耦。即業務系統本身的組件化和服務化,原有的單個業務系統會拆分為多個可以獨立開發,設計,運行和運維的小應用,這些小應用之間通過服務完成交互和集成。
微服務架構相比于單體應用解決了很多問題,但也帶來了一系列的復雜性難題。微服務架構的強的依賴關系管理、資源分配的難題、部署復雜及其監管和協作方面的難題等也成為一些公司將其拒之門外的原因。
作為近年來云計算領域最火熱的技術,Docker 容器技術的 DevOps 優勢有效提升了微服務的架構能力,為微服務架構的應用提供了“天然”的載體。
微服務架構與容器架構的結合
Docker 容器技術使用鏡像方式將應用程序和它依賴的操作系統、類庫以及運行時環境整體打包,將鏡像作為標準的交付物,提供了交付環境一致性。重新定義了開發測試、交付和部署過程,可以做到「Build once,Run anywhere」,縮短了企業應用從開發、構建到發布、運行的整個生命周期,實現了對線上項目的灰度升級,提升產品交付迭代速度,使得項目可持續集成,大大降低開發、測試、部署和運維的壓力。
二、容器服務簡介
品高云早在 2014 年,4.0 版本時,品高云已支持對 Linux 底層容器 LXC 的納管,并做到了虛擬化與容器的單機雙模結構,用以支撐低損耗需求的大數據和 HPC 計算。在最近的品高云 7.0 版本中又隆重推出可以對 Docker 容器進行自動化編排和管理的彈性容器服務(ECS)。
彈性容器服務(ECS)是一項高度可擴展的容器管理服務,通過在品高云 VM 實例中自動化部署 Docker 鏡像,搭建容器集群,并在集群中執行預定義好的服務或任務,為應用軟件的開發、測試、運維提供一套統一的運行環境。并全面支持品高云自帶的計算、存儲、網絡、負載均衡和安全能力,并且提供了容器級 HA 機制保障。
三、特色
開發測試運維一體化: 解決了開發測試運維一體化的問題,可以對項目進行持續集成、持續交付和持續部署。線上項目無需停機維護,可進行在線的灰度升級。
圖形化容器管理器: 品高云提供向導式的圖形化容器管理器界面,用戶只需要提交容器運行的環境參數、容器數據,完成任務定義,云平臺就可以自動完成集群構建、任務運行等過程。
減少系統部署的重復工作量 : 品高云彈性容器服務提供容器編排工具,資源編排模板可以保存為文本文件,用戶可以將其保存在本地或云平臺存儲路徑中,后期有類似系統上線時,可以直接使用該模板或者作適當修改即可,大大減少了系統上線的重復工作。
容器級 HA 機制保障: 在容器集群內執行多個服務時,當某個 ECS 實例出現故障宕機時,容器集群調度器會根據定義,自動啟用其他 ECS 實例運行原 docker 容器的服務,從而保障服務的高可用性。
可與品高云其他服務協同使用: 品高云容器服務可與多種品高云已有服務進行配合,包括:云網絡、網絡安全組、虛擬防火墻、負載均衡、資源伸縮、監控告警、簡單通知服務等等,滿足用戶構建靈活應用系統的要求。
四、技術架構
彈性容器服務技術架構
容器服務基于品高云設施構建(在客戶已有虛擬化、存儲和網絡資源能力之上)。同時容器服務屬于 IaaS+服務,因此提供了業務所需的容器編排、管理和自動化部署能力。
云平臺提供預制有 Docker 管理器的 EC2 鏡像,通過此鏡像生成的 ECS 實例可供創建容器集群使用。用戶可自定義微服務任務模板,并且通過調度器向 ECS 實例中的 Docker 代理發送指令,來創建任務所需的容器。
容器服務同時支持 REST API 和圖形化的控制臺進行管理。而平臺底層利用容器集群管理引擎進行的統一的調度和監控。
容器服務還可以和負載均衡服務進行聯動,微服務創建的容器可以直接通過負載均衡進行訪問負載。當容器數量發生變化時,也可以自動加入到負載均衡負載中。
一些相關名詞
任務定義 :定義任務使用的 Docker 容器,包括容器的名字和鏡像,運行時的內存大小等,ECS 將根據定義好的任務去分配資源,運行并配置 Docker 容器。
ECS 實例鏡像 :導入配置好容器服務的 EC2 鏡像,啟動鏡像得到的實例,可以根據任務定義,創建并運行不同的 Docker 容器。
容器任務:服務是一系列任務的集合,包含有所運行的任務、事件、部署和監控信息等。
容器集群 :可以根據 ECS 實例鏡像啟動 ECS 實例,并且可以管理服務和任務,同時對它們使用的資源進行監控。
五、ECS 實踐——部署 WordPress 博客站點
WordPress 博客站點由 web 和 mysql 兩個組件構成,需要用到兩個 docker 鏡像,分別為 WordPress 鏡像和 mysql 鏡像,均使用最新版本即可,彈性容器服務會根據用戶指定的鏡像和配置自動下載鏡像并啟動。本次部署 WordPress 博客的架構包括一個 mysql 服務器、兩個 web 服務器和一個負載均衡器。
整個部署過程分為 WordPress 部署準備、部署 WordPress 應用和 WordPress 灰度升級三個階段。
WordPress 部署架構圖
01
部署準備
彈性容器服務正常使用的前提條件是管理員在高級服務初始化配置中添加了彈性容器服務。同時,已準備好部署 WordPress 博客所需的 Web 鏡像 (通過 docker hub 網站或品高云私有鏡像庫下載 ) 和 MySQL 鏡像 (通過 docker hub 網站或品高云私有鏡像庫下載 )。
02
部署應用
首先,為 WordPress 博客的 mysql 服務器創建任務定義,具體步驟如下:
1. 進入【高級服務→容器服務→任務定義】,點擊新建任務定義,出現創建任務定義界面導向圖 1,填寫任務定義的名稱為 wordpress-mysql;
圖1 新建 mysql 任務定義界面
2. 點擊圖 1 中容器定義下的“添加”,出現如圖 2 界面,填寫 mysql 容器的信息,給定容器內存,和鏡像名稱 (mysql)。然后點擊高級選項,在環境變量中指定 mysql 的用戶名和密碼,在網絡別名里填上 wordpress-mysql,web 服務器就可以通過 wordpress-mysql 這個名稱訪問到 mysql 服務器。配置信息(圖 3)填寫完后,點擊保存;
圖2 新建容器及頁面
圖3 新建 mysql 容器配置信息界面
3. 保存任務定義。
創建完 mysql 的任務定義后,再為 web 服務器創建任務定義,具體步驟如下:
4. 在任務定義列表界面,點擊新建任務定義,填下任務定義的名稱為 wordpress-web;
5. 點擊容器定義中的“添加”,出現如圖 4 界面,與 mysql 容器一樣填下內存和鏡像名稱 (wordpress) 等基本信息,指定容器的 80 端口映射到虛擬機的 80 端口,然后在高級選項的環境變量中配置 WordPress 數據庫信息,數據庫賬號密碼需與剛才定義的 mysql 容器的賬號密碼一致,最后設置 mysql 的地址為 wordpress-mysql:3306,點擊保存;
圖4 新建 Web 容器頁面
圖5 新建 Web 容器配置信息頁面
6. 保存任務定義。
任務定義創建后之后,我們新建一個容器集群用于部署 WordPress 博客。
7. 進入【容器服務→容器集群】,點擊新建,填入集群名稱為 wordpress,如圖 6 所示;
圖6 創建集群界面
8. 點擊集群詳情進入到 ECS 實例的標簽頁面,然后新建三個 ECS 實例用于部署 web 服務器和 mysql 服務器,創建過程與基礎服務中創建實例的過程是相同的;
9. 添加 ECS 實例后,進入到服務的標簽頁面,新建 mysql 服務,出現如圖 7 界面。選擇我們剛才已定義好的任務定義 wordpress-mysql,設置服務名稱為 wordpress-mysql,期望數量為 1,然后點擊創建按鈕;
圖7 新建 mysql 服務界面
10. 為 web 服務創建一個負載均衡器;
11. 等到 mysql 服務和負載均衡器運行起來之后,新建 web 服務,出現如圖 8 界面。設置任務定義為 wordpress-web,名稱為 wordpress-web,期望數量為 2(對應兩個 web 服務器),然后為 web 服務配置負載均衡(圖 9),填寫好信息后點擊創建按鈕;
圖8 新建 web 服務界面
圖9 為 web 服務配置負載均衡
12. 創建好的服務會顯示在服務標簽頁的列表里,如圖 10 所示。當 mysql 服務和 web 服務達到穩定狀態 (服務中運行的任務數量等于期望數量) 時,在瀏覽器地址欄輸入負載均衡器的地址(本示例中 ip 為 10.202.144.100),即可訪問到 WordPress 博客的安裝界面,接下來就可以對 ordpress 進行初始化操作了;
圖10 服務列表頁面
13. 完成初始化操作后,輸入登錄帳號和密碼,成功進入首頁后,可查看到博客的背景頁面和首頁,如圖 11、12 所示;
圖11 WordPress 博客 V1 版本背景頁面
圖12 WordPress 博客 V1 版本首頁界面
14. 發帖子并查看已發布成功,則 WordPress 博客 V1 版本應用的部署完成,如圖 13 所示。
圖13 WordPress 博客 V1 版本內容頁面
03
灰度升級
在部署完 WordPress 博客站點后,將其進行升級至版本 2,具體操作步驟如下:
1. 進入【高級服務→容器服務→任務定義】,找到任務定義組 wordpress-web,點擊進入詳情,選中上次創建的任務定義 wordpress-web:1,然后點擊新建版本,出現如圖 14 界面;
圖14 wordpress-web 任務定義界面
2. 點擊容器名稱 wordpress-web,出現如圖 15 界面,將鏡像替換為版本 v2 的鏡像 registry.bingosoft.net:5000/wordpress:v2,然后點擊保存;
圖15 更改鏡像名稱為 v2 版本
3. 保存任務定義,則 v2 版本的 WordPress 任務定義創建完畢。
4. 任務定義創建好之后,進入【容器服務→容器集群】,進入 WordPress 集群查看服務頁面,可以看到剛創建的服務列表,如圖 16 所示。選中 wordpress-web 服務,右鍵更新服務,選擇 v2 版本任務定義 wordpress-web:2。
圖16 服務列表界面
5. 為了使服務在升級過程中能夠達到不中斷訪問,這里我們最好設置服務的最小健康百分比為 100,最大百分比為 400,以確保升級過程中有 web 在提供服務,最后更新該服務,如圖 17 所示;
圖17 更新 wordpress-web 服務
6. 升級過程中,不斷訪問負載均衡器,可以看到服務一直是訪問可行的。因為在升級初期依然保持著原有服務的可用性,所以還會看到原有背景圖片還是如圖 11 所示,之后新版本的服務運行起來,承載新服務的實例會自動加入到負載均衡器中,這時可以看到主頁的背景圖片從圖 11 切換到圖 18,
圖18 WordPress 博客 v2 版本背景
7. 訪問網站主頁(圖19)、控制面板(圖20),并發表評論(圖21),一切正常,則升級完畢。
圖19 WordPress 博客 v2 版本主頁界面
圖20 博客網站管理員控制面板
圖21 發布新博客并評論
彈性容器服務(ECS)已經在品高云 7.0 版本中正式發布,對于這項服務感興趣的讀者,可以通過視頻的方式更加直觀地了解它。