談到云原生, 繞不開"容器化"
本文轉(zhuǎn)載自微信公眾號「全棧碼農(nóng)畫像」,作者小碼甲 。轉(zhuǎn)載本文請聯(lián)系全棧碼農(nóng)畫像公眾號。
Containers
現(xiàn)在談到云原生, 繞不開“容器”。
在《Cloud Native Patterns》一書中,作者Cornelia Davis指出:“容器是云原生應(yīng)用的基石”;
云原生基金會將微服務(wù)容器化作為云原生旅行的第一步。
很容易就想到將微服務(wù)容器化, 過程也很簡單。
將代碼、依賴項和運(yùn)行時打包到一個稱為容器鏡像的二進(jìn)制文件中。鏡像存儲在鏡像倉庫,Docker官方維護(hù)了Docker Hub鏡像倉庫。
需要時,可以將鏡像轉(zhuǎn)換為可運(yùn)行的容器實(shí)例,該實(shí)例可在裝有容器運(yùn)行時引擎的任何計算機(jī)上運(yùn)行,你可以按需部署任意數(shù)量的容器實(shí)例。
下圖顯示了三個微服務(wù)在單主機(jī)以容器化運(yùn)行。
每個容器維護(hù)自己的依賴關(guān)系和運(yùn)行時,這可能會有所不同,上圖我們看到在同一主機(jī)上運(yùn)行的Product微服務(wù)的不同版本。每個容器共享基礎(chǔ)主機(jī)操作系統(tǒng),內(nèi)存和處理器的一部分,但彼此隔離。
容器模型遵守“十二要素應(yīng)用”的Dependencies原則。
要素2指定“每個微服務(wù)隔離并打包其自己的依賴項、更改項(不影響整個系統(tǒng))”
容器同時支持Linux和Windows工作負(fù)載。
雖然存在多個容器供應(yīng)商,但Docker已經(jīng)成為打包、部署和運(yùn)行云原生應(yīng)用程序的事實(shí)標(biāo)準(zhǔn),Docker占據(jù)了最大的市場份額,該公司一直在推動軟件容器的發(fā)展。
Why containers
- 容器提供了移植性,并保證在跨環(huán)境時,能輸出一致。通過將所有內(nèi)容封裝進(jìn)單個程序包,可以將微服務(wù)+依賴項與基礎(chǔ)設(shè)施隔離。
- 你可以在安裝Docker運(yùn)行時引擎的 任何環(huán)境部署同一容器,容器化消除了預(yù)先配置環(huán)境的時間開銷 (for框架、程序庫文件、和運(yùn)行時)。
- 通過共享底層操作系統(tǒng)和主機(jī)資源,容器的占用空間比完整的虛擬機(jī)小很多,小體積,高密度,在一臺主機(jī)上可以運(yùn)行多個微服務(wù)。
容器編排
Docker Api/工具創(chuàng)建鏡像和容器,你還需要工具管理容器。
管理容器的軟件稱為"容器編排器",大規(guī)模使用容器時,容器編排器至關(guān)重要。
容器編排器做了什么 ?
任務(wù) | 描述 |
---|---|
Scheduling | 自動配置、調(diào)度容器實(shí)例 |
Affinity/anti-affinity | 在附近或相距較遠(yuǎn)的位置調(diào)配容器,以提高可用性和性能 |
Health monitoring | 自動探測并修復(fù)故障 |
Failover | 自動將失敗的實(shí)例轉(zhuǎn)移到狀況良好的機(jī)器 |
Scaling | 自動增減容器 去匹配預(yù)期狀態(tài) |
Networking | 給容器提供覆蓋網(wǎng)絡(luò) |
Service Discovery | 容器之間互相發(fā)現(xiàn) |
Rolling Upgrades | 零停機(jī)增量升級,零停機(jī)自動回滾 |
容器編排器遵循“十二要素應(yīng)用程序”中的disposability和concurrency原則。
要素9:強(qiáng)調(diào)“服務(wù)實(shí)例應(yīng)該是一次性的,這樣有利于快速啟動(提供可伸縮能力),優(yōu)雅關(guān)閉讓系統(tǒng)保持正確狀態(tài)”,
要素8:強(qiáng)調(diào)“服務(wù)在大量小的相同進(jìn)程(副本)上擴(kuò)展,而不是在可用的功能最強(qiáng)大的計算機(jī)上擴(kuò)展單個大型實(shí)例”。
目前市面上存在多個容器編排器,但Kubernetes已成為云原生世界的事實(shí)標(biāo)準(zhǔn),這是一個可移植、可擴(kuò)展的、開源的、管理容器的平臺。
你可以自建k8s集群,自行調(diào)配和管理k8s資源,這可能很復(fù)雜。
Azure云將K8s作為托管服務(wù)(AKS),你只需要利用K8s功能,而不需要維護(hù)K8s集群。
Azure Kubernets Services在第2章“Scaling Cloud-Native Applications”中詳細(xì)介紹。
Ref
https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition