iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
1

在我們用Docker實作完成後,我們要更深入地看待我們的系統(雖然系統現在還長得其實很簡單)

假設我們是一間大公司的會員管理系統,需要負荷上千萬的會員數量,那我想AP Server不可能只會開一台而已吧,勢必會是多台AP在運作,同時會利用Cluster的概念搭建整個的系統架構,而且在某些尖峰時刻,還可能會對映著Scale out加開機器

而當我們要導入這些架構時,Docker Swarm就是很好的幫手,但是其相較輕量與單一,所以一旦複雜的情境出現時,就有更好的選擇了

這個更好的選擇,就是Google Kubernetes,一項用於自動部署、擴展和管理容器化應用程式的開源系統,他不只支援Docker,還有支援多項容器工具,是現階段的當紅炸子雞

他的主要概念也不難,就是主從式架構,由其Master透過Controller Manager來主控,而其中有包含

  • 四種Controller:
    • Node Controller:控制各個Node,每個Node中有多個Pod,這個Pod就是把Container多包一層,要Scale的時候就是增減Pod即可
    • Route Controller:這個特別,只有在Google Compute Engine的時候才有作用,用來讓Node之間互相通信
    • Service Controller:K8s的所有網路都是與外界隔離的,需要由Service註冊服務,來配送封包至對的地方,可以達到Load Balance的效果
    • PersistentVolumeLabels Controller:由於K8s Cluster都是Stateless的,因此要讓服務間實現時會利用Volume進行掛載
  • API Server:是以Web Service的標準實現,是主要執行在K8s裡的所有操作
  • Scheduler:監控與調度每個Node和Pod的任務
  • etcd:是一個分散式資料庫系統,負責存放與處理所有資料的資源

再來Node裡面,都有幾個必備:

  • Kubelet:主要負責與Master的API Server溝通,並監控管理其所被分派的Container / Pod
  • Kube-Proxy:Node的網路代理,進行服務Service
  • cAdvisor:監視和收集每個Node上的資訊,例如:CPU、記憶體等等資料
  • Pod:K8s裡面的最小單位,每個Pod裡面就是一個Container

https://ithelp.ithome.com.tw/upload/images/20191013/20111916jdZBed1Juu.png
圖片來源:Kubernetes

使用K8s的優點:

  • 多租戶管理介面(Multi-tenancy):提供多管理角色與權限,可以分群分組監控使用其所需的叢集
  • 平台擴充性(Cluster Scalability):當需要擴充或減少Node的時候可以輕鬆執行
  • 高可用性管理介面(Master HA):任何管理皆須由Master操作
  • 自定義叢集資源(Custom Resource Definitions):可以客製化自己定義資源的配置
  • 滾動式升級(Rolling Update):以自動累進是更新,且會監控程序,避免服務中斷,若遇到問題,也可回朔
  • 應用服務擴展性(Service Scalability):類似Cluster Scalability,可以自動擴展
  • 自動化負載平衡(Service Discovery and Load Balancing):藉由Service Controller來實現Load Balance的概念
  • 自動重啟失能服務(Self-healing):當發現錯誤時,能自動以相同Image和yaml做重啟修復
  • 容器網路管理(Network Policy):支援多種容器網路介面,並可根據管理人員需求設定

參考資料、延伸閱讀:

下集預告:相關分享 - 微服務


上一篇
實作分享 - Jenkins + Github實現CI
下一篇
相關分享 - 微服務
系列文
後端功城獅30天DevOps探討挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言