一文帶你了解華為云容器實例【與云原生的故事】
本文主要內容:
云容器實例介紹
產品架構
產品優勢
應用場景
最佳實踐
小結
1、云容器實例介紹
云容器實例(Cloud Container Instance,CCI)服務提供Serverless Container(無服務器容器)引擎,讓您無需創建和管理服務器集群即可直接運行容器。
Serverless是一種架構理念,是指不用創建和管理服務器、不用擔心服務器的運行狀態(服務器是否在工作等),只需動態申請應用需要的資源,把服務器留給專門的維護人員管理和維護,進而專注于應用開發,提升應用開發效率、節約企業IT成本。傳統上使用Kubernetes運行容器,首先需要創建運行容器的Kubernetes服務器集群,然后再創建容器負載。
云容器實例的Serverless Container就是從使用角度,無需創建、管理Kubernetes集群,也就是從使用的角度看不見服務器(Serverless),直接通過控制臺、kubectl、Kubernetes API創建和使用容器負載,且只需為容器所使用的資源付費。
2、產品架構
云容器實例提供Serverless Container服務,擁有多個異構的Kubernetes集群,并集成網絡、存儲服務,讓您方便的通過控制臺、kubectl、Kubernetes API創建和使用容器負載。
基于華為云底層網絡和存儲服務(VPC、ELB、NAT、EVS、OBS、SFS等),提供豐富的網絡和存儲功能。
提供高性能、異構的基礎設施(x86服務器、GPU加速型服務器、Ascend加速型服務器),容器直接運行在物理服務器上。
使用Kata容器提供虛擬機級別的安全隔離,結合自有硬件虛擬化加速技術,提供高性能安全容器。
多集群統一管理,容器負載統一調度,使用上無需感知集群存在。
基于Kubernetes的負載模型提供負載快速部署、彈性負載均衡、彈性擴縮容、藍綠發布等重要能力。
3、產品優勢
3.1、隨啟隨用
3.2、極速彈性
云容器實例的Kubernetes集群是提前創建好的,且從單一用戶角度看資源“無限大”,所以能夠提供容器秒級彈性伸縮能力,讓您能夠輕松應對業務快速變化,穩健保障業務SLA。
3.3、按需秒級計費
根據實際使用的資源數量,按需按秒計費,避免業務不活躍時段的費用開銷,降低用戶成本。
3.4、完全開放的原生平臺
緊跟Kubernetes和Docker社區,迅速同步最新版本
原生支持Kubernetes API
3.5、高安全
云容器實例同時具備容器級別的啟動速度和虛擬機級別的安全隔離能力,提供更好的容器體驗。
原生支持Kata Container
基于Kata的內核虛擬化技術,為您提供全面的安全隔離與防護
自有硬件虛擬化加速技術,讓您獲得更高性能的安全容器
通過Kata容器實現多租戶容器強隔離
4、應用場景
4.1、大數據、AI計算
當前主流的大數據、AI訓練和推理等應用(如Tensorflow、Caffe)均采用容器化方式運行,并需要大量GPU、高性能網絡和存儲等硬件加速能力,并且都是任務型計算,需要快速申請大量資源,計算任務完成后快速釋放。
云容器實例提供如下特性,能夠很好的支持這類場景。
計算加速:提供GPU/Ascend等異構芯片加速能力
大規模網絡容器實例調度:支持大規模、高并發的容器創建和管理
隨啟隨用、按需付費:容器按需啟動,按資源規格和使用時長付費
圖1?大數據AI計算場景
4.2、生物基因、藥物研發等科學計算
生物基因、藥品研發等領域需要高性能、密集型計算,同時對成本較敏感,需要低成本、免運維的計算平臺。科學計算一般都是任務型計算,快速申請大量資源,完成后快速釋放。
云容器實例提供如下特性,能夠很好的支持這類場景。
高性能計算:提供高性能計算、網絡和高I/O存儲,滿足密集計算的訴求
極速彈性:秒級資源準備與彈性,減少計算過程中的資源處理環節消耗
免運維:無需感知集群和服務器,大幅簡化運維工作、降低運維成本
隨啟隨用、按需付費:容器按需啟動,按資源規格和使用時長付費
圖2?科學計算
4.3、DevOps持續交付
軟件開發型企業,希望構建從代碼提交到應用部署的DevOps完整流程,提高企業應用迭代效率。DevOps流程一般都是任務型計算,如企業CI/CD(持續集成/持續發布)流程自動化,需要快速申請資源,完成后快速釋放。
云容器實例提供如下特性,能夠很好的支持這類場景。
流程自動化:無需創建和維護集群,實現從CI/CD的全流程自動化
環境一致性:以容器鏡像交付,可以無差別地從開發環境遷移到生產環境
隨啟隨用、按需付費:容器按需啟動,按資源規格和使用時長付費
圖3?DevOps持續交付
4.4、高彈性業務
業務波峰波谷較明顯的業務,日常流量穩定,高峰期又需要快速擴展資源,并對成本有一定訴求,如視頻直播、媒體資訊、電商、在線教育等應用。
云容器實例提供如下特性,能夠很好的支持這類場景。
快速彈性伸縮:業務高峰時,業務能夠快速從CCE彈性擴展到CCI,保障業務穩定運行
低成本靈活計費:業務平穩期在CCE上包周期計費,節省成本;高峰期彈性擴容到CCI上,按需計費,高峰期結束后又可以快速釋放資源,降低成本
圖4?彈性擴展
5、最佳實踐
5.1、Dockerfile參數在云容器實例中如何使用
如果您了解容器引擎的使用,Dockerfile文件的一些配置如何對應到云容器實例中去使用呢?
下面通過一個例子來說明他們之間的關系,這樣您就可以更好的了解和熟悉云容器實例。
FROM ubuntu:16.04 ENV VERSION 1.0 VOLUME /var/lib/app EXPOSE 80 ENTRYPOINT ["./entrypoint.sh"] CMD ["start"] 上面是一個Dockerfile文件,包含一些常見的參數ENV、VOLUME、EXPOSE、ENTRYPOINT、CMD,這些參數在云容器實例中可以按如下方法配置。
ENV為環境變量,在云容器實例中創建負載的時候,可以在高級配置中設置,如下所示。
VOLUME為定義容器卷,通常配合docker run -v 宿主機路徑:容器卷路徑一起使用。
云容器實例中支持將云硬盤掛載到容器中,只需在創建負載時添加云硬盤卷,并配置大小、掛載路徑(也就是容器卷的路徑)即可。
ENTRYPOINT與CMD對應云容器實例中高級配置的啟動命令,詳細內容請參見容器啟動命令。
EXPOSE即暴露某個端口,通常在啟動容器時配合docker run -p <宿主端口>:<容器端口>一起使用,云容器實例中容器如果要對外暴露端口,只需在創建負載的時候配置負載訪問端口:容器端口的映射,這樣就可以通過負載請求域名:負載訪問端口訪問到容器。
5.2、使用Tensorflow訓練神經網絡
本實驗主要演示在云容器實例中創建GPU類型的負載,以tensorflow的圖像分類為示例,演示在容器中直接使用GPU訓練一個簡單的神經網絡。
使用容器化的方式做此類人工智能訓練與推理有如下優勢:
容器化消除環境差異,不需要自己安裝各種軟件和配套版本,如python,tensorflow,cuda toolkit等軟件。
GPU驅動免安裝。
低成本,按秒計費。
serverless帶來的免VM運維。
tensorflow社區有tensoflow的基礎鏡像,已經裝好了基礎的tensorflow庫,它分支持GPU和支持CPU兩個版本,在鏡像中心即可下載。
GPU版本地址為 tensorflow/tensorflow:1.15.0-gpu
CPU版本地址為 tensorflow/tensorflow:1.13.0
本文采用tensorflow官網中一個已經訓練好的模型,對圖片進行分類,模型名稱Inception-v3。Inception-v3是在2012年ImageNet視覺識別挑戰賽上訓練出的模型,它將一個非常大的圖片集進行了1000個種類的圖片分類。Github有使用Inception-v3進行圖片分類的代碼。
訓練模型的代碼,均在工程https://gpu-demo.obs.cn-north-1.myhuaweicloud.com/gpu-demo.zip中,您需要將代碼下載解壓,并將代碼工程打入鏡像中。下面附上制作鏡像的Dockerfile文件內容:
FROM tensorflow/tensorflow:1.15.0-gpu ADD gpu-demo /home/project/gpu-demo 其中ADD將gpu-demo工程拷貝到鏡像的/home/project目錄下,可以根據自己需要修改。
執行docker build -t tensorflow/tensorflow:v1 .?命令制作鏡像(.表示當前目錄,即Dockerfile文件所在目錄)。
鏡像制作好后需要上傳到容器鏡像服務,具體步驟請參見https://support.huaweicloud.com/usermanual-swr/swr_01_0009.html。
登錄云容器實例管理控制臺。
創建GPU型命名空間,填寫命名空間名稱,設置好VPC和子網網段后,單擊“創建”。
GPU型命名空間
左側導航欄中選擇“工作負載 > 無狀態(Deployment)”,在右側頁面中單擊“創建無狀態負載”。
配置負載信息。
填寫基本信息,選擇2創建的命名空間,Pod數量選擇為“1”,選擇Pod規格為“GPU加速型”,顯卡的驅動版本選擇“418.126”,如下所示。
GPU Pod的詳細規格和顯卡驅動的說明請參見Pod規格。
選擇需要的容器鏡像,這里選擇的上傳到鏡像容器倉庫的tensorflow鏡像。
在容器設置下面的高級設置中,掛載一個NFS類型的文件存儲卷,用于保存訓練后的數據。
掛載NFS存儲
在啟動命令中輸出執行命令和參數。
可執行命令:/bin/bash
參數1:-c
參數2:python /home/project/gpu-demo/cifar10/cifar10_multi_gpu_train.py --num_gpus=1 --data_dir=/home/project/gpu-demo/cifar10/data --max_steps=10000 --train_dir=/tmp/sfs0/train_data; while true; do sleep 10; done
此處?--train_dir?表示訓練結果存儲路徑,其前綴?/tmp/sfs0?需要與4.c中設置的NFS“容器內掛載路徑”路徑保持一致,否則訓練結果無法寫入NFS中。
--max_steps表示訓練迭代的次數,這里指定了10000次迭代,完成模型訓練大概耗時3分鐘,如果不指定,默認是1000000次迭代,耗時會比較長。max_steps數值越大,訓練時間越久,結果越精確。
該命令是訓練圖片分類模型,然后單擊“下一步”。
設置容器啟動命令
配置負載訪問信息。
本例中選擇“不啟用”,單擊“下一步”。
單擊“提交”,然后單擊“返回工作負載列表”。
在負載列表中,待負載狀態為“運行中”時,負載創建成功。
單擊負載名稱,進入負載詳情界面,選擇“Pod列表>終端”Tab頁。當黑色區域文本框中出現#號時,說明已登錄。
進入到工程所在目錄,執行python classify_image.py --model_dir=model命令,可以看到分類結果。
3. # cd /home/project/gpu-demo 4. # ls -l 5. total 96 6. -rw-r--r-- 1 root root 6874 Aug 30 08:09 airplane.jpg 7. drwxr-xr-x 3 root root 4096 Sep 4 07:54 cifar10 8. drwxr-xr-x 3 root root 4096 Aug 30 08:09 cifar10_estimator 9. -rw-r--r-- 1 root root 30836 Aug 30 08:09 dog.jpg 10.-rw-r--r-- 1 root root 43675 Aug 30 08:09 flower.jpg 11.drwxr-xr-x 4 root root 4096 Sep 4 02:14 inception 12.# cd inception 13.# python classify_image.py --model_dir=model --image_file=/home/project/gpu-demo/airplane.jpg 14.… 15.2019-01-02 08:05:24.891201: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 15131 MB memory) -> physical GPU (device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:0a.0, compute capability: 6.0) 16.airliner (score = 0.84250) 17.wing (score = 0.03228) 18.space shuttle (score = 0.02524) 19.warplane, military plane (score = 0.00691) airship, dirigible (score = 0.00664)
也可以不指定要分類的圖片,默認將使用下面這張圖片分類。
熊貓
執行命令python classify_image.py ––model_dir=mode # python classify_image.py --model_dir=model … 2019-01-02 08:02:33.271527: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1084] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 15131 MB memory) -> physical GPU (device: 0, name: Tesla P100-PCIE-16GB, pci bus id: 0000:00:0a.0, compute capability: 6.0) giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89107) indri, indris, Indri indri, Indri brevicaudatus (score = 0.00779) lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00296) custard apple (score = 0.00147) earthstar (score = 0.00117) 執行結果顯示模型認為這是一只大熊貓。
tensorflow官網中給了一個深度卷積網絡的模型代碼和訓練數據:CIFAR-10。這是個簡化的圖片分類模型,將圖片分成以下10類:airplane, automobile, bird, cat, deer, dog, frog, horse, ship和truck。當然喂給模型的圖,也就是訓練數據,也是這10種類型的圖片。
可見它準確識別出圖中是架飛機。label_image.py是使用剛剛訓練的模型來進行圖片分類的代碼。
同時,在“Pod列表>監控”Tab頁中,可以看到各種資源的使用率。
6、小結
華為云容器實例具有云服務器容器、秒級計費、安全快遞、開放兼容特點,可用于人工智能、生物基因、DevOps持續交付等場景,隨著容器技術不斷發展,云容器實例在行業中的應用也會更加廣泛。
【與云原生的故事】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/345260
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。