2022-06-06|閱讀時間 ‧ 約 7 分鐘

【深智書摘】Kubernetes的定位、優勢與基本知識

  Kubernetes由Joe Beda、Brendan Burns和Craig McLuckie創立,從2014年釋出至今,已成為了影響全球的重要雲端技術。其不只是Google十幾年來大規模容器技術應用的重要成果、全新基於容器技術的分散式架構解決方案,還是一個整合式的、完備的分散式系統開發和支撐平台。對於Kubernetes,我們可以從何處開始深入理解呢?
【從3個視角解析Kubernetes的定位與優勢】
  Kubernetes是什麼?
1. Kubernetes是Google嚴格保密十幾年的秘密武器——Borg的一個開放原始碼版本。
  Borg是Google內部使用的久負盛名的大規模叢集管理系統,以容器技術為基礎來實現資源管理的自動化,以及跨多個資料中心的資源使用率的最大化。十幾年以來,Google一直透過Borg管理著數量龐大的應用程式叢集。正是由於站在Borg這個前輩的肩膀上,汲取了Borg的經驗與教訓,所以Kubernetes一經開放原始碼就一鳴驚人,並迅速稱霸容器領域。Kubernetes也是一個全新的以容器技術為基礎的分散式架構領先方案,是容器雲的優秀平台選型方案,已成為新一代的以容器技術為基礎的PaaS平台的重要底層框架,也是雲端原生技術生態圈的核心,服務網格(Service Mesh)、無伺服器架構(Serverless)等新一代分散式架構框架及技術紛紛以Kubernetes為基礎實現,這些都奠定了Kubernetes在基礎架構領域的王者地位。
  其次,如果我們的系統設計遵循了Kubernetes的設計思想,那麼傳統系統架構中那些和業務沒有多大關係的底層程式或功能模組,就都可以立刻從我們的視線中消失,我們不必再費心於負載平衡器的選型和部署實施問題,不必再考慮引入或自己開發一個複雜的服務治理框架,不必再頭疼於服務監控和故障處理模組的開發。總之,使用Kubernetes提供的解決方案,我們不僅節省了不少於30%的開發成本,還可以將精力更加集中於業務本身,而且由於Kubernetes提供了強大的自動化機制,所以系統後期的運行維護難度和運行維護成本大幅度降低。
2. Kubernetes是一個開放的開發平台。
  與J2EE不同,它不侷限於任何一種語言,沒有限定任何程式設計介面,所以不論是用Java、Go、C++還是用Python編寫的服務,都可以被映射為Kubernetes的Service(服務),並透過標準的TCP通訊協定進行互動。此外,Kubernetes平台對現有的程式設計語言、程式設計框架、中介軟體沒有任何侵入性,因此現有的系統也很容易改造升級並遷移到Kubernetes平台上。
3. Kubernetes是一個完備的分散式系統支撐平台。
  Kubernetes具有完備的叢集管理能力,包括多層次的安全防護和存取控制機制、多租戶應用支撐能力、透明的服務註冊和服務發現機制、內建的智慧負載平衡器、強大的故障發現和自我修復能力、服務輪流升級和線上擴充能力、可擴充的資源自動排程機制,以及多粒度的資源配額管理能力。同時,Kubernetes提供了完整的管理工具,這些工具涵蓋了包括開發、部署測試、運行維護監控在內的各個環節。因此,Kubernetes是一個全新的以容器技術為基礎的分散式架構解決方案,並且是一個整合式的完備的分散式系統開發和支撐平台。
【Kubernetes的基本知識】
  我們首先要了解Kubernetes的一些基本知識,這樣才能理解Kubernetes提供的解決方案。在Kubernetes中,Service是分散式叢集架構的核心。一個Service物件擁有如下關鍵特徵。
  • 擁有唯一指定的名稱(比如mysql-server)。
  • 擁有一個虛擬IP位址(ClusterIP位址)和通訊埠編號。
  • 能夠提供某種遠端服務能力。
  • 能夠將用戶端對服務的存取請求轉發到一組容器應用上。
  Service的服務處理程序通常以Socket通訊方式為基礎對外提供服務,比如Redis、Memcached、MySQL、Web Server,或者是實現了某個具體業務的特定TCP Server處理程序。雖然一個Service通常由多個相關的服務處理程序提供服務,每個服務處理程序都有一個獨立的Endpoint(IP+Port)存取點,但Kubernetes能夠讓我們透過Service(ClusterIP+Service Port)連接指定的服務。有了Kubernetes內建的透明負載平衡和故障恢復機制,不管後端有多少個具體的服務處理程序,也不管某個服務處理程序是否由於發生故障而被重新部署到其他機器,都不會影響對服務的正常呼叫。更重要的是,這個Service本身一旦建立就不再變化,這意味著我們再也不用為Kubernetes叢集中應用服務處理程序IP位址變來變去的問題頭疼了。
  容器提供了強大的隔離功能,所以我們有必要把為Service提供服務的這組處理程序放入容器中進行隔離。為此,Kubernetes設計了Pod物件,將每個服務處理程序都包裝到相應的Pod中,使其成為在Pod中執行的一個容器(Container)。為了建立Service和Pod 間的連結關係,Kubernetes首先給每個Pod都貼上一個標籤(Label),比如給執行MySQL的Pod貼上name=mysql標籤,給執行PHP的Pod貼上name=php標籤,然後給相應的Service定義標籤選擇器(Label Selector),例如,MySQL Service的標籤選擇器的選擇條件為name=mysql,意為該Service要作用於所有包含name=mysql標籤的Pod。這樣一來,就巧妙解決了Service與Pod的連結問題。
《從Docker動手邁入全新DevOps時代:最完整Kubernetes全書》,龔正, 吳治輝, 閆健勇 編著
《從Docker動手邁入全新DevOps時代:最完整Kubernetes全書》,龔正, 吳治輝, 閆健勇 編著
分享至
成為作者繼續創作的動力吧!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

深智數位的沙龍 的其他內容

你可能也想看

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.