雲容器化編程- ASK & ACK
應用程式容器化的發展在2000年後已經在個別的系統上出現(例如 Sandboxie – Windows, LXC – Linux, Solaris Containers – Solaris),但要講到容器化的發光發亮,應該就是 Docker Inc公司推出的同名產品 Docker的時候。現在比較普遍使用的容器執行個體技術中,Docker佔有大多數,其他的技術如 Containerd 或 Cri-o 也開始慢慢普及。
什麽是應用程式容器
作業系統層虛擬化亦稱容器化,是一種將作業系統核心虛擬化的技術,允許使用者把應用程式分割成幾個獨立的單元,在不同的核心中運行。利用以下的圖表可以更清楚的表達。
傳統部署時代
早期,各個應用程式也在物理伺服器上直接執行。這種方式無法為應用程式定義資源邊界,導致潛在的資源分配問題。 例如,如果在物理伺服器上執行多個應用程式,可能會出現其中一個應用程式佔用大部分資源的情況, 結果可能導致其他應用程式的效能下降。
虛擬化部署時代
作為解決方案,出現了虛擬化。虛擬化技術允許你在單一個物理伺服器的 CPU 上執行多台虛擬機器(VM)。 每一台虛擬機器是一台完整的系統,利用虛擬化硬體資源執行所有元件,包括作業系統。
虛擬化允許應用程式在虛擬機器之間隔離,提供一定程度的安全。虛擬化技術同時能夠更有效地利用物理伺服器上的硬體資源,並且因為可以輕鬆地新增或更新虛擬機器裡的應用程式,而實現更好的可伸縮性,降低硬體成本等。
容器部署時代
容器類似於虛擬機器,但是容器可以讓應用程式同時使用同一個共享作業系統(OS)。容器相比虛擬機器較為輕量。容器與虛擬機器類似,具有自己的檔案系統、CPU、記憶體、程序空間等。容器的部署也支持跨雲或跨OS版本進行移植。
容器化的好處
容器因為具有許多優勢而變得普及起來。下面列出的是容器的一些好處:
- 敏捷的應用程式建立和部署:一般容器建立不需要很長的編碼,如果有合適的容器映像,只需一行的指令已經可以部署應用程式!
- 持續開發、整合和部署:由於映像的不可變性,容器支援可靠且頻繁的容器映像構建和部署,並提供快速簡單的復原過程。
- 跨開發、測試和生產環境的一致性:有跨雲和作業系統發行版本的可移植性,例如同一個容器映像可在 Ubuntu、RHEL、CoreOS、本地和任何雲端上執行。
- 鬆散耦合、分散式、彈性、解放的微服務:應用程式被分解成較小的獨立部分, 並且可以動態部署和管理。需要更新其中獨立、分散的部分時,也比較傳統部署容易。
- 因爲資源的隔離,應用程式的效能更能預測,資源利用也可以有更高效率和高密度。
容器化的趨勢
由於使用容器化有很多不同的好處,越來越多的應用程式也開始被容器化。以下的報告指出應用程式容器化的比例正持續上升。
圖片來源:https://www.stackrox.com/post/2020/03/6-container-adoption-trends-of-2020/
另一方面,一些常用的技術應用程式使用容器化的比率也很高,原因是因為廠商已經預先準備好應用程式的容器,可以把部署應用架構時所需的時間大大減少。
2020 November, Datadog
為什麼需要 Kubernetes ?
利用容器是執行應用程式的好方式。在生產環境中,你需要管理執行應用程式的容器,並確保不會停機。 例如,其中一個容器發生故障時,需要啟動另一個容器作替補。如果可以讓系統來處理,會更為容易和快捷。
Kubernetes 提供以下功能:
- 服務發現和負載平衡:Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載平衡並分配網路流量,從而使部署穩定。
- 自動部署和復原:使用 Kubernetes 描述已部署容器的期望狀態,再以受控的速率將實際狀態更改為期望狀態。例如,可以自動化 Kubernetes 來部署建立新容器, 刪除現有容器並將它們的所有資源用於新容器。
- 自動完成裝箱計算:Kubernetes 允許指定每個容器所需的 CPU 和記憶體(RAM)。 當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。
- 自我修復:Kubernetes 可以重新啟動失敗的容器、替換容器、刪除不回覆執行狀況檢查的容器。
阿里雲的Kubernetes
阿里雲的Container Service for Kubernetes (簡稱 ACK) 整合了阿里雲虛擬化、儲存、網絡與安全功能,提供高效能、可伸縮的容器應用程式管理能力,支援企業級容器化應用程式的整體生命週期管理。
ACK服務分別提供專有版和托管版兩個版本,使用專有版需要建立Kubernetes的Master節點和Worker節點,Master節點的作用是來管理Kubernetes的底層基礎架構,Worker節點是用來執行應用容器的個體,建立Master節點需要對Kubernetes有較深入的認識。如果使用托管版,只需要建立部署應用的Worker節點,比較適合大部分的使用者。
ASK叢集是阿里雲推出的無伺服器Kubernetes容器服務。無需購買節點即可直接部署容器應用,也無需對叢集進行節點維護和容量規劃。ASK根據應用程式配置的CPU和記憶體資源按使用量收費。ASK叢集提供完善的Kubernetes相容能力,同時降低了Kubernetes的使用門檻,讓使用者更專注於應用程式,而不是管理底層基礎架構。
ACK與ASK叢集的對比
ASK核心優勢
- 免運維:低門檻快速建立Serverless叢集,快速部署容器應用。無需管理Kubernetes節點和伺服器,聚焦業務應用。
- 彈性:無需擔心叢集節點的容量規劃。根據應用負載,輕鬆靈活擴展應用程式所需的資源。
- 原生相容:支援原生Kubernetes應用和生態,包括Service、Ingress、Helm等,無縫遷移Kubernetes應用。
- 按量計費:不執行不計費,也沒有資源閒置費用,同時Serverless帶來更低的運維成本。
專有版Kubernetes | 托管版Kubernetes | Serverless Kubernetes | |
主要特點 | 需要自行建立Master節點及Worker節點。 | 只需建立Worker節點,Master節點由ACK建立並託管。 | 無需建立Master節點及Worker節點。 |
可以對叢集基礎設施進行更多的控制,需要自行規劃、維護、升級伺服器叢集 | 簡單、低成本、高可用,無需管理Master節點。 | 無需管理任何節點,可直接啟動應用程式。 | |
收費方式 | 承擔Master節點、Worker節點以及其他基礎架構資源的費用。 | 承擔Worker節點以及其他基礎架構資源的費用。 | 按容器的資源使用量和時長計費。 |
叢集建立 |
ASK應用場景
- 應用託管:ASK叢集中無需管理和維護節點,無需容量規劃,降低基礎架構管理和運維成本。
- 彈性業務負載:對於有著明顯的波幅特徵的業務負載,例如線上教育、電子商務等產業,ASK叢集的伸縮能力可以顯著降低計算成本,減少閒置資源浪費,平滑應對突發流量高峰。
- 定時任務:在ASK叢集中執行定時任務,任務結束停止計費。無需維護固定資源池,避免資源閒置浪費。
以下會示範使用 ASK 部署網站程式,並且會利用容器映像的不可變性作快速簡單的復原。
ASK容器編程示範
- 在容器服務 – Kubernetes,按建立叢集
- 選擇ASK叢集,輸入叢集名稱,然後選擇地區、規格等,再按建立叢集
- 建立叢集大概需要數分鐘時間
- 在工作負載-任務,按使用鏡像建立
- 輸入應用名稱,類型選Deployment,按下一步
- 選擇鏡像名稱和鏡像TAG
- 建立服務
9. 在瀏覽器打開負載平衡的外部IP便可以看到應用程式的回應
10. 另一方面,因為ASK是利用 Serverless的關係,所以在雲服務器ECS裡,是不會有任何的ECS instance 資源。
容器的更新示範
以下是如何把新的鏡像部署到kubernetes,可以注意鏡像的版本是 nginx:1.7
- 按編輯
3. 在容器組裏,可以看到容器有序的逐步更新到指定的容器TAG版本
容器的復原示範
- 選擇Deployment ,選擇復原。
- 選擇要復原到的版本
- 可以在容器組看到容器有序的復原到指定的版本
結語
這示範,可以看到使用容器編程可以非常快速和簡單的部署應用程式鏡像,而且因爲容器鏡像的不可變特性,在不同環境作部署或復原也可以變得快捷。加上現在使用容器編程能利用Serverless部署,進一部把使用容器化應用程式的費用和維護複雜性降低。

解決方案工程師
覃永德 Barry Chum