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

更新 發佈閱讀 7 分鐘

  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的連結問題。

raw-image

本文摘錄自深智數位出版之《從Docker動手邁入全新DevOps時代:最完整Kubernetes全書》

留言
avatar-img
留言分享你的想法!
avatar-img
深智數位的沙龍
10會員
25內容數
深智數位的沙龍的其他內容
2023/08/02
在機器學習中,我們的目標是找到一種能夠最好地描述數據的模型。例如,在迴歸問題中,我們希望找到一種函數,該函數能以一種對我們的目標變數(例如:銷售量、股票價格等) 的最佳估計的方式,描述輸入特徵(例如:廣告支出、市場狀況等)。
Thumbnail
2023/08/02
在機器學習中,我們的目標是找到一種能夠最好地描述數據的模型。例如,在迴歸問題中,我們希望找到一種函數,該函數能以一種對我們的目標變數(例如:銷售量、股票價格等) 的最佳估計的方式,描述輸入特徵(例如:廣告支出、市場狀況等)。
Thumbnail
2023/07/21
  在程式設計中,變數(Variable)是一個代表內存位置的符號,用於存儲和操作數據。它是一個內存單元,可以存儲各種類型的數據,例如整數、浮點數、字符串等。變數的值可以在程式執行時改變,並在需要時被讀取。 變數是暫時存放資料用的,可以將變數想像成是一個箱子,箱子裡面可以是空的,
Thumbnail
2023/07/21
  在程式設計中,變數(Variable)是一個代表內存位置的符號,用於存儲和操作數據。它是一個內存單元,可以存儲各種類型的數據,例如整數、浮點數、字符串等。變數的值可以在程式執行時改變,並在需要時被讀取。 變數是暫時存放資料用的,可以將變數想像成是一個箱子,箱子裡面可以是空的,
Thumbnail
2023/05/17
新手在使用ChatGPT 時,對於ChatGPT的回答普遍印象是廢話連篇,而這通常是因為沒有給出足夠清晰的指示所導致,以下將介紹3個讓你跟ChatGPT溝通更有效的提示技巧,幫助讀者快速掌握提升回答品質的秘訣!
Thumbnail
2023/05/17
新手在使用ChatGPT 時,對於ChatGPT的回答普遍印象是廢話連篇,而這通常是因為沒有給出足夠清晰的指示所導致,以下將介紹3個讓你跟ChatGPT溝通更有效的提示技巧,幫助讀者快速掌握提升回答品質的秘訣!
Thumbnail
看更多
你可能也想看
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Thumbnail
本文將探討Kubernetes內部DNS解析的相關流程,並介紹如何利用DNS來找到服務。透過瞭解DNS的工作原理,可以讓應用服務的問題處理更有效率,並提供基本測試與結論。
Thumbnail
本文將探討Kubernetes內部DNS解析的相關流程,並介紹如何利用DNS來找到服務。透過瞭解DNS的工作原理,可以讓應用服務的問題處理更有效率,並提供基本測試與結論。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
Kubernetes 是目前最流行的容器編排平台,提供了一個環境來保證容器化應用的高可用性和伸縮性。這篇文章將展示如何將你的 Gin 應用部署到 Kubernetes上。
Thumbnail
Kubernetes 是目前最流行的容器編排平台,提供了一個環境來保證容器化應用的高可用性和伸縮性。這篇文章將展示如何將你的 Gin 應用部署到 Kubernetes上。
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News