爲何選擇K8s助力微服務

Kubernetes 與微服務的天生絕配

其實,爲什麼我們需要 K8s,它到底能做什麼呢?

容器是打包和運行應用程序的好方式。在生產環境中,你需要管理運行應用程序的容器,並確保不會停機。 例如,如果一個容器發生故障,則需要啓動另一個容器。如果系統處理此行爲,會不會更容易?這就是 Kubernetes 來解決這些問題的方法! Kubernetes 爲你提供了一個可彈性運行分佈式系統的框架。 Kubernetes 會滿足你的擴展要求、故障轉移、部署模式等。

Kubernetes 會提供:

  • 服務發現和負載均衡,Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡並分配網絡流量,從而使部署穩定。
  • 自動部署和回滾,你可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態更改爲期望狀態。例如,你可以自動化 Kubernetes 來爲你的部署創建新容器, 刪除現有容器並將它們的所有資源用於新容器。
  • 自我修復,Kubernetes 重新啓動失敗的容器、替換容器、殺死不響應用戶定義的運行狀況檢查的容器,並且在準備好服務之前不將其通告給客戶端。
  • 存儲編排,Kubernetes 允許你自動掛載你選擇的存儲系統,例如本地存儲、公共雲提供商等。
  • 自動完成裝箱計算,Kubernetes 允許你指定每個容器所需 CPU 和內存(RAM)。 當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。
  • 密鑰與配置管理,Kubernetes 允許你存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置,也無需在堆棧配置中暴露密鑰。

那麼對於 K8s 提供的這些功能,其實對於微服務來講,都是很好的一個平臺提供。換句話說,對於微服務來說,如果使用 K8s 的話,可以不用考慮語言上的限制,更不用考慮各種開發語言的框架的限制;對於各種語言來說,在前面也介紹過,都有很多不同的框架,那如果運用這些框架時,就需要考慮不同服務之間如果屬於不同的語言,那麼該如何來實現微服務的架構呢?從這一角度來分析,微服務與 K8s 屬於天作之合,它們的結合可以說是天衣無縫、完美至極。在後面章節中,將會介紹它們的天衣無縫:自治與無縫遷移。

基於 Kubernetes 集羣的服務治理

其實,做微服務架構設計,我們希望得到什麼呢?看下圖:

從上面這張圖中可以看到,微服務的解耦、封裝,從而簡化開發人員的開發。調用方便,主要體現在sdk或者說client的提供者很容易被調用,這就體現了K8s的服務註冊與發現。安全性考慮,基於K8s集羣的保障,可以讓微服務們處於一個堡壘中,這樣避免外部的干擾。同時,服務之間直接走內部網絡,可以大大提升性能。

說到這些,其實服務的自動化纔是一個重點,自治能力體現了系統的健壯性。在前面章節中說到了K8s具有自動修復的能力,可以將失敗或出現問題的容器進行重新編排、啓動。容器本身的健康檢查會被監視,當不響應用戶定義的運行檢查的容器就會被殺死。

同時,K8s提供自動部署能力,可以通過簡單的命令來執行即可發揮K8s的作用。同時,K8s會根據用戶的節點選擇,將pod分配到對應的節點,這樣對於運維人員來說,即使出現節點宕機,pod可以迅速的在其他節點被啓動。

基於 Kubernetes 的服務無縫遷移

在K8s集羣中的服務,如果想要被遷移到其他的機器或其他集羣。在傳統的實現中,可能需要考慮到很多點:服務包的轉移、共享,配置的轉移,數據庫的轉移等等。但對於容器化來說,這些都被打包成image,而這些image可以被上傳到一個倉庫Habor,當需要遷移環境的時候,這些服務的鏡像其實都可以不動,運維人員將要做的是:將開發人員編寫的基於K8s的yaml文件在對應的集羣中進行部署即可。運維人員無需關心任何其他事情,只需要在部署前,將需要的相關配置處理好即可。這將大大減少開發人員、運維的成本,讓他們專注於部署,而不用關心其他的瑣碎的事情。因爲K8s是可以跨平臺、跨系統的。主要存在K8s集羣,服務都可以無縫的進行遷移過去。這也是微服務基於K8s的一個優勢。下圖爲K8s基於Habor的架構圖。

  • 通過kubectl命令工具發起資源創建kubectl create -f xxx.yaml
  • k8s處理相關請求後kube-scheduler服務爲pod尋找一個合適的“家”node2並創建pod。
  • node2上的kubelet處理相關資源,使用docker拉取相關鏡像並運行。

從上面的流程操作來看,將微服務從一個K8s集羣,遷移到另一個集羣,其操作是可以無縫對接的,可以同配置、同環境參數的無縫的遷移,這就是雲原生下K8s帶來的優勢。也是需要企業現在一直推薦屬性docker、K8s等技術的一個關鍵性要素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章