Containers, Kubernetes, Microservices 的前世今生

Oursky
Oursky Team
Published in
9 min readMar 8, 2019

--

圖片來源:chuttersnap via Unsplash

最近收到很多來自 AWS、Google 和 Azure 的講座邀請,無獨有偶,題目都圍繞著幾個你可能也聽聞過但未必有實際接觸過的 buzzword:Containers (容器)、Kubernetes、Microservices (微服務)。不管是單獨使用 Containers 容器技術,還是搭配 Kubernetes 或 Microservices 微服務組合使用,這種技術和架構在國外正大放異采,號稱能夠提升軟件開發團隊整體的生產力,進而令你的公司迎頭趕上數碼化、產業轉型等大趨勢,讓 IT 業界人士都躍躍欲試。不過 Containers、Kubernetes 和 Microservices 的應用目前在香港尚未普及,為了讓大家一窺當紅技術的面貌,今天來跟大家分享一下它們的實務操作,還有三者之間所構成的微妙關係。

什麼是 Containers (容器)

圖片來源:Google Cloud

Containers、Kubernetes 和 microservices 三者互為因果,足以寫成一個前世今生的故事,而這個故事要由 containers — 容器技術開始說起。

容器技術能夠在作業系統層進行虛擬化 (Operating system–level virtualization),將應用程式所需要的執行環境整個打包,方便應用程式在不同平台上移動。聽起來和虛擬機器 (Virtual Machine) 相類似,都是虛擬化的技術,目標是打包執行環境,方便轉移應用程式。不過容器與虛擬機器最大的差異,在於虛擬的層面:傳統虛擬機器主要在作業系統層虛擬化,而容器則是更上一層,在應用程式層進行虛擬化。比起虛擬機器需要安裝獨立作業系統才能運作,不同的容器能共享同一個作業系統,所以它的執行速度遠遠超過傳統虛擬機器。

容器帶來最大的好處,是讓應用程式保持一致性:無論你的應用程式在哪個平台上運行,只要該平台支援容器,你可以假設應用程式都在完全相同的執行環境上運行

由此可以想像,使用容器後,開發人員和維運人員過往常遇到開發環境 (DEV) 和生產環境 (PROD) 不同而導致部署費時失事的問題就迎刃而解了。只要開發環境和生產環境都部署了容器,就能確保應用程式在兩邊都能夠正常運作;弭平溝通障礙,避免耗費時日在修改部署和規格上。

宏觀一點來看,未來的大趨勢將會是實體機、虛擬機 (Virtual Machine)、私有雲 (Private Cloud)、公眾雲 (Public Cloud) 等多種平台並行。對企業而言,如果是重要的機密資料,你可能傾向想存放在私有的實體機以策安全;而需要大量運算資源的邏輯計算,置放於成本較低的公眾雲上執行則可能是更具成本效益的選擇。但不管如何,只要在你的 IT 架構支援容器,你旗下所有的應用程式都能夠輕易遊走於各個平台之間,讓你能夠快速應對各種突如其來的狀況。

什麼是 Kubernetes (K8S)

大部分使用容器技術的企業,不約而同都會搭配以 Kubernetes(k8s)為首的容器管理調度平台。Kubernetes 是 Google 在 2015 年釋出的開源項目,可說是 Google 使用 Docker 容器技術期間、累積無數心得而研發的心血結晶,它能夠幫你:

  • 部署多容器:k8s 能夠在一台主機上同時運行數個容器。進階的 k8s cluster 則更進一步,能夠在多台機器上同時運行多個容器。
  • 滾動升級 (Rolling Update):k8s 以累進的方式更新容器,在更新版本的時候仍然可以提供持續而不中斷的服務。如果更新版本時出現錯誤,k8s 會自動將容器版本「滾回」上一個穩定的版本。
  • 自動管理各個容器的狀況:譬如某個容器無預警崩潰,k8s 會自動重啟容器。
  • 自動分配資源:如果某容器的系統需求突然增加,k8s 會自動增撥資源予該容器應付突發情況。

現實中可以導致服務中斷的原因不勝枚舉而且防不勝防,可能是版本更新途中出錯,可能是服務需求暴增導致容器崩潰,甚至是完全摸不著頭腦的系統失靈 — 現在統統可以交給 k8s 幫你管理好,讓你免除後顧之憂。雖然理論上你當然也可以選擇交由維運人員人手管理容器,但當你營運的規模日漸擴大,容器數量由數個增至數百個、數千個的時候,要崩潰的可不是容器而是你的維運人員了。加上剛才提到企業的大趨勢是多種平台並行,維運人員單是要管理好各個平台已經是個艱鉅的任務,如果再加上人手管理大量容器,資源會更形緊絀。而透過使用 k8s 自動化管理容器,將能夠協助你省下可觀的營運成本,大幅提升管理效率。

什麼是 Microservices (微服務)

隨著大小企業努力趕上產業轉型的浪潮,陸續轉移至雲端服務,Microservices (微服務) 應用程式架構自然而然成為了這幾年的 IT 寵兒。它的核心概念是將一個龐大的單體式 (Monolithic) 專案分拆成數個小巧、獨立的專案,將應用程式的複雜性大大降低。舉例說,我們現在如果想要開發一個購物商城,所謂單體式架構就是把所有功能設計合併成一個龐大的體系,每一節環環相扣,形成一個緊密的運作架構。而相對於單體式架構將所有的功能放在同一個服務上,微服務架構則是把購物商城的功能分拆為好幾個獨立的服務模組,例如用戶管理、產品瀏覽、購物車和付款等等,再使用已定義好的 protocol(如HTTP)讓這些分散、獨立的服務之間能夠建立並進行溝通。有別於單體式架構「一榮俱榮,一損俱損」,微服務架構明顯的優勢包括:

  • 靈活、快速地開發個別服務:因為每個服務都是單獨運作的,你可以保持獨立開發、部署某個指定服務的彈性,讓開發單一服務變得更簡單。這樣有助於加速開發流程,加快推出市場的步伐,也有利於水平擴充服務規模。
  • 減低應用程式的複雜度: 相較於在單體式架構下應用程式龐大、代碼庫隨著服務擴充而不斷增加其複雜度,微服務架構下把應用程式被分拆成小巧迷你的專案,代碼可以保持簡潔,可看性自然也更高。
  • 避免造成整體系統崩潰:微服務架構底下各功能模組都是分散式的存在,當某個服務模組出現問題的時候,並不會造成整體系統崩潰。這尤其有利於開發或修正甚至更換整個服務 (也可以外判服務及第三方),不必擔心在開發新功能或者修復某個崩潰的模組時會牽一髮動全身,影響整體服務運作。

在這個講求敏捷式開發 (Agile Development) 的年代,不難理解為什麼微服務會應運而生,成為近年火熱的應用程式架構。敏捷式開發講求的是靈活性、針對性的快速演變優化,這正是微服務架構的特色所在,解決了以往單體式結構盤根錯節、不易維護的難題。

如何無痛引進 Containers、Kubernetes 和 Microservices?

看完上述優點,相信大家都能感受到這些最新技術都有其獨特的魅力,也可能開始想要把它們引進團隊裡,體驗它們對於企業開發的助益。不過轉型往往不是可以一步登天的事情,就如上面提到目前在香港這些技術尚未全面普及,除了要找到熟悉容器、Kubernetes 和微服務的專才甚至是能將三者融會貫通的人才並非易事之外,採用容器技術和微服務架構很講究各團隊的互相配合(如開發團隊和維運團隊),當中也涉及了一些流程和企業文化的改變。

以我們的自身經驗為例,從八年前我們公司開始使用容器技術和微服務架構以來,也經歷過一段改革的陣痛期。八年前使用容器和微服務的企業可說是寥寥可數,能參考的案例少之又少,只能跌跌碰碰從錯誤中學習和改良。綜合多年使用容器的心得,我們開發了一套可以在 Kubernetes 上執行的無伺服器平台 (serverless platform) — Skygear。當初開發 Skygear 的目的圍繞著以下三點:

  • 降低採用容器技術的門檻:容器技術是相對新穎的概念,要在短時間內聘請到能掌握相關技術的人才並不容易。Skygear 整合了 Kubernetes 和容器技術,提供一個簡化了的部署指令讓維運人員能夠輕易地將微服務部署到 Kubernetes 上,過程中你的團隊不用面對容器技術和 Kubernetes 的學習曲線,也無需直接處理容器和 Kubernetes 層面的設定,大大降低使用容器技術的門檻。
  • 加快應用程式的開發速度:Skygear 將一些應用程式常見的功能建構成微服務,例如用戶管理、訊息推送和聊天室等等。假設你的應用程式需要用戶管理(幾乎每個應用程式都會用到),就可以直接套用 Skygear 的用戶管理微服務,無需從頭打造功能,加快應用程式的開發速度。
  • 避免供應商綑綁:相較於其他平台比較著重向用戶提供一條龍服務將用戶綑綁在它們的平台上,Skygear 支援所有類型的雲端和機器的部署,如實體機、虛擬機 (Virtual Machine)、私有雲 (Private Cloud)、公眾雲等我,方便用戶按需要轉換不同平台和服務商。

隨著 Containers、Kubernetes 和 Microservices 的流行,討論度也越來越高。想導入這些技術,你可以考慮從以下方面入手:

  • 建立敏捷開發流程和企業文化:想要一台跑車跑得飛快,總不能只有輪胎變得輕盈,車身卻保持笨重對吧?想要讓容器或微服務達到最佳的發揮,開發流程和企業文化都要做出相應的配合,整個團隊的思維都要保持一致、敏捷。
  • 聘請技術專才:Containers、Kubernetes 和 Microservices 的學習曲線不低,最好聘請已經熟悉且能夠掌握這些技術的專才,如同想要開發優秀的應用程式就必須先聘請到優秀的開發人員一樣。
  • 使用協作平台來協調:要分別掌握 Containers、Kubernetes 和 Microservices 並非易事,透過使用第三方協作平台,等於一次打包了容器、K8S 和微服務,化繁為簡,便利實務操作。

使用雲端以及配合雲端運算的容器、Kubernetes 和微服務已是大勢所趨,企業更要加快腳步,掌握技術最新動態。如果您有興趣更深入了解容器技術和微服務架構,我們樂意提供顧問服務,歡迎與我們聯絡:info@skygear.io

我們亦會不定時舉辦相關技術講座,歡迎留下聯絡電郵獲取最新通知!

關於我們

Oursky 是一間香港本地的軟件顧問,累積多年使用容器技術的經驗,致力協助企業數位轉型並推動本土技術發展。

Skygear 無伺服器平台讓你輕鬆駕馭三大技術概念,助你快速打造優秀的數碼產品!

Originally published at blog.oursky.com on March 8, 2019.

--

--

All about app development: iOS, Android, Web, UI / UX, and SEO. Team of developers, designers and geeks. Cat people. oursky.com @ Hong Kong | Taipei