談到雲原生, 繞不開"容器化"


傳送門

  • 什么是雲原生?
  • 雲原生設計理念
  • .NET微服務

Containers

現在談到雲原生, 繞不開“容器”。

在《Cloud Native Patterns》一書中,作者Cornelia Davis指出:“容器是雲原生應用的基石”;
雲原生基金會將微服務容器化作為雲原生旅行的第一步。

很容易就想到將微服務容器化, 過程也很簡單。
將代碼、依賴項和運行時打包到一個稱為容器鏡像的二進制文件中。鏡像存儲在鏡像倉庫,Docker官方維護了Docker Hub鏡像倉庫。

需要時,可以將鏡像轉換為可運行的容器實例,該實例可在裝有容器運行時引擎的任何計算機上運行,你可以按需部署任意數量的容器實例。

下圖顯示了三個微服務在單主機以容器化運行。

每個容器維護自己的依賴關系和運行時,這可能會有所不同,上圖我們看到在同一主機上運行的Product微服務的不同版本。每個容器共享基礎主機操作系統,內存和處理器的一部分,但彼此隔離。

容器模型遵守“十二要素應用”的Dependencies原則。

要素2指定“每個微服務隔離並打包其自己的依賴項、更改項(不影響整個系統)”

容器同時支持Linux和Windows工作負載。

雖然存在多個容器供應商,但Docker占據了最大的市場份額,該公司一直在推動軟件容器的發展,它已經成為打包、部署和運行雲原生應用程序的事實上的標准。

Why containers

  • 容器提供了移植性,並保證在跨環境時,能輸出一致。通過將所有內容封裝進單個程序包,可以將微服務+依賴項與基礎設施隔離。

  • 你可以在安裝Docker運行時引擎的 任何環境部署同一容器,容器化消除了預先配置環境的時間開銷 (for框架、程序庫文件、和運行時)。

  • 通過共享底層操作系統和主機資源,容器的占用空間比完整的虛擬機小很多,小體積,高密度,在一台主機上可以運行多個微服務。

容器編排

Docker Api/工具創建鏡像和容器,你還需要工具管理容器。

管理容器的軟件稱為"容器編排器",大規模使用容器時,容器編排器至關重要。

容器編排器做了什么 ?

任務 描述
Scheduling 自動配置、調度容器實例
Affinity/anti-affinity 在附近或相距較遠的位置調配容器,以提高可用性和性能
Health monitoring 自動探測並修復故障
Failover 自動將失敗的實例轉移到狀況良好的機器
Scaling 自動增減容器 去匹配預期狀態
Networking 給容器提供覆蓋網絡
Service Discovery 容器之間互相發現
Rolling Upgrades 零停機增量升級,零停機自動回滾

容器編排器遵循“十二要素應用程序”中的disposabilityconcurrency原則。

要素9: 強調“服務實例應該是一次性的,這樣有利於快速啟動(提供可伸縮能力),優雅關閉讓系統保持正確狀態”
要素8: 強調“服務在大量小的相同進程(副本)上擴展,而不是在可用的功能最強大的計算機上擴展單個大型實例”。

目前市面上存在多個容器編排器,但Kubernetes已成為雲原生世界的事實標准。這是一個可移植、可擴展的開源的、管理容器的平台。

你可以自建k8s集群,自行調配和管理k8s資源,這可能很復雜。
Azure雲將K8s作為托管服務(AKS),你只需要利用K8s功能,而不需要維護K8s集群。

Azure Kubernets Services在第2章“Scaling Cloud-Native Applications”中詳細介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM